2017-02-10 5 views
0

ユーザは画面上の任意の場所をタップできます。また、注釈をタップしてアノテーションに関連するテキストを表示することもできます。目的UITapGestureRecognizerのmkmapviewユーザが注釈をタップしたかどうかをテストする方法

画面上の任意の場所をタップできるように、tapgesturerecoginzerをセットアップしました。

問題は、アノテーションをタップすると、tapgesturerecognizerイベントがdidSelectAnnotationViewの前に発生するため、私がしたくないときにタップジェスチャー認識を実行することです。

タップレスト認識ツールで、注釈をタップしたかどうかテストすることはできますか?

答えて

0

ソリューション:.Mで

@interface myVC : UIViewController <UIGestureRecognizerDelegate> 

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; 
[self.mapView addGestureRecognizer:tap]; 
tap.delegate = self; 

注Niravがあることを必要とすることを委任声明を

私のヘッダには(.H)私は、デリゲートに追加

Niravのコードを追加しましたが、IF文を変更しました:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (([touch.view isKindOfClass:[MKPinAnnotationView class]]) || ([touch.view isKindOfClass:[MKAnnotationView class]])) 
    { 
    return NO; 
    } 
    return YES; 
} 
1

私はLongGestureと同じ問題に直面しているので、UIGestureRecognizerDelegateを使用してジェスチャーアクションを呼び出さないようにすることができます。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view isKindOfClass:[MKPinAnnotationView class]]) 
    { 
     return NO; 
    } 
    return YES; 
} 

注:はあなたのtapGestureでデリゲートを設定するのを忘れないでください。

+0

私は正しいパスに入れてくれましたが、注釈をタップしたときにMKPinAnnotationViewが認識されなかったため、MKAnnotationViewが動作するための追加テストを追加する必要がありました。以下の拡張コードを参照してください。 – Guy

関連する問題