私のallowableMovement
プロパティはUILongPressGestureRecognizer
無視されているようです。シングルビューアプリケーションテンプレートを使用して新しいプロジェクト(Xcode 4.5.1、iOS 6)を作成し、ビューにLong PressGestureRecognizerを追加しました。配線されたコンセントとアクションがあります。アクションメソッドのコードは次のとおりです。
- (IBAction)longPress:(UILongPressGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStatePossible) NSLog(@"possible");
if (sender.state == UIGestureRecognizerStateBegan) NSLog(@"began");
if (sender.state == UIGestureRecognizerStateChanged) NSLog(@"changed");
if (sender.state == UIGestureRecognizerStateRecognized) NSLog(@"recognized");
if (sender.state == UIGestureRecognizerStateCancelled) NSLog(@"cancelled");
if (sender.state == UIGestureRecognizerStateFailed) NSLog(@"failed");
CGPoint locationInView = [sender locationInView:self.view];
NSLog(@"long press: allowableMovement= %f, x= %f, y= %f", sender.allowableMovement, locationInView.x, locationInView.y);
}
十分に長く押して放すと、ログに次のように表示されます。
2012-10-30 20:24:41.449 Long Press[1078:907] began
2012-10-30 20:24:41.455 Long Press[1078:907] long press: allowableMovement= 10.000000, x= 210.500000, y= 99.500000
2012-10-30 20:24:42.880 Long Press[1078:907] recognized
2012-10-30 20:24:42.882 Long Press[1078:907] long press: allowableMovement= 10.000000, x= 208.500000, y= 96.000000
これは私が期待することです。
ただし、何に設定allowableMovement
しても(ポジティブ、ネガティブ、ビッグ、スモール)、状態が1になるとUIGestureRecognizerStateBegan
、画面全体に指をドラッグできます。状態がに変化しUIGestureRecognizerStateChanged
、頻繁に更新され、locationInViewは引き続き正確に追跡します。手放すと、UIGestureRecognizerStateRecognized
状態と最終出力がログに表示されます。
クラスリファレンスは、動きがを超えると認識機能が失敗するはずだと言っていallowableMovement
ます。allowableMovement
プロパティが無視されているように見えるのはなぜですか?