setCancelsTouchesInView を呼び出すと実際に何が起こるのだろうか。公式ドキュメントではカバーされていませんhttp://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html
ありがとう
setCancelsTouchesInView を呼び出すと実際に何が起こるのだろうか。公式ドキュメントではカバーされていませんhttp://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html
ありがとう
ACB はUIGestureRecognizer
参考文献を引用しました。もう少し具体的にするために、パン ジェスチャ レコグナイザがアタッチされたビューがあり、View Controller に次のメソッドがあるとします。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesBegan");
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesMoved");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesEnded");
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesCancelled");
}
- (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender {
NSLog(@"panGesture");
}
もちろん、パン ジェスチャ レコグナイザはpanGestureRecognizerDidUpdate:
メッセージを送信するように構成されています。
ここで、ビューに触れて、パン ジェスチャが認識されるまで指を動かし、指を離したとします。アプリは何を印刷しますか?
ジェスチャ レコグナイザーが にcancelsTouchesInView
設定されている場合YES
、アプリは次のメッセージをログに記録します。
touchesBegan
touchesMoved
touchesCancelled
panGesture
panGesture
(etc.)
touchesMoved
キャンセル前に複数いただく場合がございます。
したがって、(デフォルト) に設定cancelsTouchesInView
するYES
と、システムはジェスチャ認識エンジンから最初のメッセージを送信する前にタッチをキャンセルし、そのタッチに関するタッチ関連のメッセージはそれ以上取得されません。
ジェスチャ レコグナイザーが にcancelsTouchesInView
設定されている場合NO
、アプリは次のメッセージをログに記録します。
touchesBegan
touchesMoved
panGesture
touchesMoved
panGesture
touchesMoved
panGesture
(etc.)
panGesture
touchesEnded
したがって、 に設定cancelsTouchesInView
するNO
と、システムはジェスチャ タッチのタッチ関連メッセージをジェスチャ レコグナイザーのメッセージと交互に送信し続けます。タッチはキャンセルされるのではなく、正常に終了します (タッチ中にホームボタンが押されたなど、他の理由でシステムがタッチをキャンセルしない限り)。
Apple 開発者ポータルのリンクから:
cancelsTouchesInView — ジェスチャ レコグナイザーがそのジェスチャを認識した場合、そのジェスチャの残りのタッチをビューからバインド解除します (したがって、ウィンドウはそれらを配信しません)。ウィンドウは、以前に配信されたタッチを (touchesCancelled:withEvent:) メッセージでキャンセルします。ジェスチャ レコグナイザーがそのジェスチャを認識しない場合、ビューはマルチタッチ シーケンスのすべてのタッチを受け取ります。
cancelsTouchesInView:
ジェスチャが認識されたときにタッチがビューに配信されるかどうかに影響するブール値。
@property(nonatomic) BOOL cancelsTouchesInView
討論
このプロパティが YES (デフォルト) で、レシーバーがジェスチャを認識すると、保留中のそのジェスチャのタッチはビューに配信されず、以前に配信されたタッチは、ビューに送信された touchesCancelled:withEvent: メッセージによってキャンセルされます。ジェスチャ レコグナイザーがそのジェスチャを認識しない場合、またはこのプロパティの値が NO の場合、ビューはマルチタッチ シーケンスのすべてのタッチを受け取ります。