2017-02-10 30 views
0

我允許用戶點擊屏幕上的任何位置,並且還允許他們點擊註釋以顯示與註釋相關的文本。UITapGestureRecognizer中的objective c mkmapview如何測試他們是否在註釋上點擊

爲了讓他們點擊屏幕上的任何地方,我設置了一個tapgesturerecoginzer。

問題是,當他們點擊註釋時,tapgesturerecognizer事件發生在didSelectAnnotationView之前,所以我在不想要的時候執行tapgesturerecognizer。

我可以以某種方式在tapgesturerecognizer中測試它們是否在註釋上進行了輕敲?

回答

0

解決方案:

在我的頭(.h),我增加了委託:

@interface myVC : UIViewController <UIGestureRecognizerDelegate> 

在.M:

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

注意的委託聲明Nirav說需要的是添加

然後我添加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

非常感謝這讓我走上了正確的道路,但我不得不爲MKAnnotationView添加一個額外的測試,因爲MKPinAnnotationView在我點擊Annotation時沒有被識別。參見下面的擴展代碼。 – Guy

相關問題