• 締切済み

CGRectContainsPoint 一度処理

またこちらで質問させていただきます iPhone Objective-Cに関する質問です CGRectContainsPointで指定したUIButtonの内側にtouchesMovedで動かしている UIImageViewが存在すると指定したcafをAVAudioPlayerで再生させる というコードを書きました しかしこれだと UIButtonの内側で動作があると何回も音声が再生されてしまいます UIButtonのサイズが大きいとUIImageViewがUIButton上を通過 させている間に何回も再生されます これを一度だけ再生させるようにするにはどうすればよいでしょうか? 1.UIButton上に来たら一度だけ再生 2.UIButton上から外れたら一度だけ再生という処理を解除 3.外れた後、UIImageViewをもう一度UIButtonの内側に持ってきたらまた1の処理 このようにしたいです。

みんなの回答

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

UIResponderの、UITouchに関するメソッド「touchMoved:」は、指を動かしている間、何度も繰り返し呼び出されるということは、何回も説明していると思います。 AVAudioPlayerクラスのプロパティに、「playing」があって、音楽再生中であるかどうかの判別ができます。 このふたつの事項を知っていれば、あとは条件分岐を使って、あなたなりに考えて、あなたなりにコードを書くだけです。 ※なにかわからないことがあったら、使用しているクラスのリファレンスと、関連のガイドを、Xcodeのヘルプを使って、ざっと見渡すくせを付けてください。なにかつまずくたびに、いちいち質問して、いつ返ってくるか、そもそも返ってくるのかどうかわからない回答を、ぼーっと待っているのは、むだな時間の使い方だと思いませんか? UIResponder Class Reference http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIResponder_Class/ AVAudioPlayer Class Reference http://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/

関連するQ&A

  • Objective-C error = 24

    iPhoneのアプリ開発に関する質問です UIButtonやUIImageViewを組み合わせてアプリを作成したのですが シュミレーターで実行した際、UIButtonをアニメーションで 表示させたりAVAudioPlayerでcafを再生させたりと処理を繰り返していると error = 24 (Too many open files) というエラーが発生して途中で音声が再生されなくなります エラーの内容は調べたところによるとファイルがオープンしたままで閉じていない 開きすぎている。といった状態です ソースコードを載せないと解決方法が分かりづらいかもしれませんが オープンしたUIButtonなどを閉じるにはどういったコードをどのクラスに書けばよいのでしょうか?

  • iPhone アプリ 通過後処理

    iPhone アプリ作成に関してですが UIButtonの画像付きボタンをドラッグさせた際 指定した座標を通過もしくはその座標の点の上にボタンが来たらアクションを実行 ということは可能でしょうか? また、座標ではなく、表示されているUIImageもしくはUIButtonの上を通過したら実行 という処理も可能でしょうか? 作成しているアプリでは、通過する座標は同じなのですが表示されているUIButtonがその前の処理で異なるので 個人的には後者の処理を行いたいです

  • AVAudioPlayer インスタン

    iPhone の自作アプリで音声に関する場所を作成しているのですが AVAudioPlayerのインスタン作成場所について知りたいことがあります touchesMoved内 もしくは別クラスで音声を再生させる際 [ABC play];の上にコードを書き込み NSString *_ABC = [[NSBundle mainBundle] pathForResource:@"ABC" ofType:@"caf"]; ABC = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:_ABC] error:NULL]; [ABC play]; このようなコードになりました ここで思ったのですが 処理を実行する際、playだけを行ってくれればいいのに 上記コードだと2回目3回目の処理で毎回cafファイルを読み込みインスタンを生成する といった処理内容になってしまうのでしょうか? ツールを使用しメモリ使用率を確認したところAVAudioPlayerで メモリリークしているみたいです ログにはerror = 24 (Too many open files)と表示されます releaseもしていないのでそれも原因と考えられますが複数の音声を同時 もしくはバラバラ、もしくは同じ音声を連続で再生することもあるので releaseをどこに入れたらうまくいくのか理解できていません コードを書き込む位置も含めて簡潔でいいのでアドバイスをいただけるとありがたいです

  • iPhoneアプリ error = 24

    iPhoneのアプリを自作してみたのですが AVAudioPlayerでcafを再生させる処理が多い所為か 何度もアクションを実行していると途中で音声がでなくなってしまいます iPhone 4ではそういったバグが見られないのですが iPhone 3GSやXcodeのエミュレーターではバグが発生します メモリリークの問題だと思い - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {} に[player release];を書き込んでみたりしましたが結局バグは発生してしまいました (書き込む前は実行回数20~30の間でバグが発せしていましたが 書き込み後は実行数30~40の間で発生するようになりました) コンソールを表示させて行ったところバグ発生後に error = 24 (Too many open files) というエラーが表示されました。 どのようにすればバグが改善されるのでしょうか?

  • iPhone タップ中 再生

    AVFoundationでボタンをタップ後、指定のcafを再生させているのですが ボタンをタップしている最中は再生(音声が終わったらループ) ボタンを離したら停止(音声の中間でも) 例: 画像1をタップしたままだと3秒間の音声が再生される タップ中なら3秒後、音声が終わってもループで再生される 画像1を離したら音声が停止、たとえ3秒ある音声の1秒目でも強制停止 こういった処理をおこないたいです どのようにすればよいでしょうか?

  • Objective-C ボタンを動かすには

    Objective-Cはまったくの初心者で、iPhone用のアプリを作るのに書籍を見ながらサンプルをいじっています。 画像をタップしたらその画像自体が動くようなものを作りたいのですが、 RoundRectButtonを1個だけ配置して 【imageTestViewContollorer.h】 @interface imageTest1ViewController : UIViewController { IBOutlet UIButton *myButton; } -(IBAction)tapBtn; @end 【imageTestViewContollorer.m】 @implementation imageTestViewController -(IBAction)tapBtn{ myButton.center=CGPointMake(50,50); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:2]; myButton.center=CGPointMake(160, 240); [UIView commitAnimations]; } としてみましたが、コンパイルエラーなどはありませんでしたが、ボタンを押しても何も起こりませんでした。 IBOutlet UIButtonが臭いような気もしているのですが、UIImageViewにするとRoundRectButtonと線を繋げなくなりますし、どう直してよいか見当もつかず困っています。 画像がタップされたら動く、みたいなものをそもそもRoundRectButtonに画像を割り当てた方がいいのかImageViewにタップされた場合の処理を割り当てた方がいいのかどうかもよくわかりません。 よろしくお願いいたします。

  • iPhone アプリ 音声再生

    https://sites.google.com/a/gclue.jp/iphone-app-docs/iphoneapurinyuumon--viewhen こちらのサイトを参考にして音声再生をするアプリを作成してみました。 そこで質問なのですが このサイトには1つのボタンに1つの音声を再生するコードしか書かれていませんでした。 アクションを複数作成して Aのアクション(ボタン)をタップしたらAのcafが再生され Bのアクション(ボタン)をタップしたらBのcafが再生される というようにしたいです。 アクションはViewController.hに追加し ボタンもFile's Ownerに接続済みです 後は音声コードの箇所のみなのですが… コードのヒントでも構いません。 どのようにすればいいでしょうか

  • iPhone開発について

    初歩的な質問ですが、お願い致します。 ボタンをタップで音が鳴り、再びタップで音を止めるという動きを AVAudioPlayerを利用し実装したいと考えておりますがストップが思い通りに動きません。 プレイは正常に動作しております。 xCode4 で xib を利用しております。 該当部分だけコードを以下に抜粋させていただきます。 hogeController.m - (IBAction)btn{ NSString *path = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"mp3"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *oto = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; if (hogeFlg == NO){ hogeFlg = YES; [oto play]; }else{ hogeFlg = NO; [oto stop]; } } デバッグでは、2回目のタップで、[oto stop];は通過しております。 基本的なところが理解できていないためということはわかっているのですが、解決策がわかりません。 また、xib を利用しておりますので、起動時に、- (void)viewDidload を読み込むのかな? と思い、入れてみたのですが通っておりません。 本当は、ここでセットして、ボタンタップじでは、再生と停止の処理だけを入れたいのですが、そういうことは可能なのでしょうか。 どうぞ、よろしくお願い致します。

  • 音声、動画再生中に処理落ち

    音声、動画再生中に処理落ち PCの調子が急に悪くなりました。 症状としては、音声(iTunesなど再生中)、動画などを再生中に ザ…ザ…といちいち止まってしまいます。 他に問題があって一度システムの復元で数日前に戻したのですが、 そこから悪くなったようです。(さらに前のに戻してもだめでした 買い替えしないとだめだろうと思いますがすぐには無理そうです。 そこで何かしておける緩和対策はあるでしょうか?

  • iPhone 動画ファイルの音声のみを再生

    処理負荷についてお教え下さい。 iPhone 動画ファイルの音声のみを再生した際の処理負荷は、音楽ファイル(例えばaac)を再生するのと同じでしょうか!? 動画ファイル:mp4 【動画ファイルの音声のみを再生する方法】 1、動画を再生する 2、ホームボタンを1回押す 3、ホーム画面に戻ったら、ホームボタンを2回押す 4、再生ボタンを押す 5、これで音声のみ再生になる 何卒、よろしくお願いします。