2012-03-20 10 views
7

私はカスタムUIViewを作成し、その上にUITapGestureRecognizerを追加しています。私はタップジェスチャーのハンドラーを持っています。しかし同時に私は私のUIViewがtouchesBeganを聞くことを望む& touchesEndedメソッド。私はgestureRecognizer:shouldReceiveTouch:メソッドも実装していますが、touchesBegan/touchesEndedメソッドは呼び出されません。任意の手掛かりはなぜですか?UITouchイベントをUIGestureRecognizerと一緒に聞きます

は私のカスタムUIViewの

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch { 
    return YES; 
} 

内部私のビューコントローラ

MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease]; 
       UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[aCustomView addGestureRecognizer:myGestureRecognizer]; 
       [myGestureRecognizer release]; 
+0

私はいつもtouchesBeganが唯一のマスターのViewControllerのビューに適用されると思いました。 – CodaFi

答えて

10

内には、ジェスチャー認識のためNOcancelsTouchesInView(そしておそらくdelaysTouchesBegandelaysTouchesEnded)を設定する必要があります。ジェスチャ認識プログラムのデフォルトの動作では、ジェスチャ認識プログラムとタッチパネルの両方が接触しないようにします。これらの設定では、その動作を微調整できます。

+0

私は、あなたが言及したそのような行動を得ていたらと思います。私はデフォルト設定を使用していますが、私のタッチメソッドはまだ呼び出されます。ここで私の質問を参照してください:http://stackoverflow.com/questions/15869944/how-to-prioritize-gesture-recognizers-and-touches-in-a-uiview – johnbakers

+0

@RobNapierは、私の問題にリンクされているcancelsTouchesInViewを置くことができませんでした:https://stackoverflow.com/questions/46170876/random-crash-on-pickerview-didselect-cfrunloop-is-calling-out-to-a-source1-p?noredirect=1#comment79305779_46170876 – user2363025

0

前述のとおり、UITapGestureRecognizercancelTouchesInViewプロパティをNOに設定する必要があります。アップルのドキュメントから

cancelsTouchesInView-場合、ジェスチャ認識装置は、そのジェスチャーを認識し、 それは(そう ウィンドウがそれらを提供しません)、そのビューからそのジェスチャーの残りのタッチをアンバインドします。このウィンドウは、以前の のタッチにtouchesCancelled:withEvent :)メッセージをキャンセルします。 ジェスチャ認識プログラムがそのジェスチャを認識しない場合、ビューはマルチタッチシーケンスですべて を受け取ります。

さらに読書: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/

関連する問題