6

iOS 5では、新しいダブルタップジェスチャでオーバーライドするだけで、ダブルタップズームを無効にすることができました。しかし、ダブルタップジェスチャは、mkmapviewに付属のジェスチャレコグナイザー配列には含まれていないようです。

NSArray *gestureRecognizers = [_mapView gestureRecognizers];
for (UIGestureRecognizer *recognizer in gestureRecognizers) {
    NSLog(@"%@", recognizer);
}

iOS 6では何も返しませんが、iOS 5では2つのレコグナイザーが返されます。1つはシングルタップ用で、もう1つはダブルタップ用です。

4

5 に答える 5

8

MKMapView のサブビューのジェスチャ レコグナイザーを調べます。まだどこかにありそうです。

もちろん、別のビューの GR をいじるのは少し疑わしく、次に Apple が MKMapView について何かを変更したときに壊れる可能性があります...

編集:これを読んでいる他の人の利益のために、それが aであることを確認してくださいUITapGestureRecognizernumberOfTapsRequired == 2numberOfTouchesRequired == 1

また、マップ上でダブルタップを完全に無効にする代わりに、注釈にダブルタップ GR を追加してから を実行することを検討してください[mapDoubleTapGR requireGestureRecognizerToFail:annotationDoubleTapGR]。繰り返しますが、ハック — 次の OS アップデートで壊れても、私を責めないでください!

于 2012-09-23T02:14:49.647 に答える
4

これは私にとってはうまくいきました: [_mapView.subviews[0] addGestureRecognizer:MyDoubleTapOverrider];

于 2012-10-27T08:38:21.090 に答える
1

ユーザーがビューで何かできるようにしますか? userInteractionEnabledそうでない場合は、 に設定するだけで十分NOです。もしそうなら、どのような具体的なやり取りを許可する必要がありますか? ダブルタップ以外は?その 1 つのインタラクションを無効にするのはなぜですか?

お客様のユースケースについて詳しく知るほど、より適切な回答を提供できます。

于 2012-09-20T21:18:33.870 に答える
1

これは私のために働く:

    //INIT the MKMapView    
    -(id) init{
         ...
         [self getGesturesRecursive:mapView];
         ...
    }

そして、再帰関数がサブビューをループして GR: を見つけます。

    -(void)getGesturesRecursive:(UIView*)v{
         NSArray *gestureRecognizers = [v gestureRecognizers];
         for (UIGestureRecognizer *recognizer in gestureRecognizers) {
             if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) {                  
                [v removeGestureRecognizer:recognizer];
             }
        }

        for (UIView *v1 in v.subviews){
            [self getGesturesRecursive:v1];
        }
    }

この例では、すべての tap-GR:s を削除します。しかし、好きなものを削除するように指定できると思います。

于 2013-10-30T19:18:56.463 に答える
0

代わりにロングタップジェスチャを使用できます。これは機能します。

于 2012-09-23T01:36:14.043 に答える