MKMapView
ユーザーが地図をシングルタップしたときにピンをドロップしたい。PINコードが機能していて、シングルタップが機能していますが、ダブルタップしてズームすると、最初にシングルタップが表示されます。レコグナイザーをセットアップするための私のコードは次のとおりです。
self.doubleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleDoubleTap:)];
self.doubleTap.numberOfTapsRequired = 2;
self.doubleTap.numberOfTouchesRequired = 1;
[mapView_ addGestureRecognizer:doubleTap_];
self.singleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleGesture:)];
self.singleTap.numberOfTapsRequired = 1;
self.singleTap.numberOfTouchesRequired = 1;
[self.singleTap requireGestureRecognizerToFail: doubleTap_];
[mapView_ addGestureRecognizer:singleTap_];
さて、これは驚くべきことではありません、Appleを引用すると:
注:シングルタップジェスチャとダブルタップジェスチャの場合、シングルタップジェスチャレコグナイザでダブルタップレコグナイザが失敗する必要がない場合は、ダブルタップの前にシングルタップアクションを受け取ることを期待する必要があります。ダブルタップの場合でも、アクション。最高のユーザーエクスペリエンスには一般にスタック可能なアクションが含まれるため、これは予想される望ましい動作です。
requireGestureRecognizerToFail
そこで、シングルタップレコグナイザーに追加しました。
[singleTap requireGestureRecognizerToFail:doubleTap];
これにより、シングルタップレコグナイザーがダブルタップされないようになります。
だが...
今、私のダブルタップレコグナイザーはダブルタップをMKMapView
取得しますが、取得しません。レコグナイザーでに設定cancelsTouchesInView
してみましNO
たが、それも役に立ちませんでした。
そのため、シングルタップレコグナイザーがダブルタップを取得しないようにする方法(これはありそうもないようです)、またはダブルタップイベントをmapViewに取得する方法が必要です。