2011-03-03 32 views
1

我嘗試使用UIGestureRecognizer捕獲子類MKOverlayView上的事件。 但是選擇器永遠不會被觸發。有任何想法嗎?使用UIGestureRecognizer在MKOverlayView上捕獲手勢事件

接口:

#import <MapKit/MapKit.h> 

@interface XYOverlayView : MKCircleView {} 
-(void) viewTapped:(UIGestureRecognizer *)gestureRecognizer; 
@end 

小鬼:

@implementation XYOverlayView 

- (id)initWithOverlay:(id <MKOverlay>)overlay 
{ 
    if(self = [super initWithOverlay:overlay]) 
    { 
     self.userInteractionEnabled = TRUE; 
     self.multipleTouchEnabled = TRUE; 

     UITapGestureRecognizer *tapRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)]; 
     [self addGestureRecognizer:tapRecogniser]; 
     [tapRecogniser release]; 
    } 
    return self; 
} 

-(void) viewTapped:(UIGestureRecognizer *)gestureRecognizer 
{ 
    NSLog(@"XYOverlayView tapped"); 
} 
@end 
+0

手勢識別不上覆蓋意見的工作,因爲MapKit專門阻止他們的工作。 'MKMapView'將所有覆蓋視圖放在類'MKOverlayContainerView'的容器圖層中,並且''[MKOverlayContainerView pointInside:withEvent:]'總是返回'NO'。這意味着觸摸永遠不會被視爲覆蓋視圖內,因此觸摸永遠不會觸及覆蓋視圖所附的手勢識別器。 –

回答

0

沒有得到這個工作。切換到自定義MKAnnotationView以捕捉手勢。這也有一個好處,就是窗戶的可打開區域保持相同的尺寸。

0

你忘了執行UIGestureRecognizerDelegate在你的界面,你必須導入的UIKit
#import <UIKit/UIKit.h>
@interface XYOverlayView : MKCircleView <UIGestureRecognizerDelegate>

+0

OP沒有使用任何UIGestureRecognizerDelegate方法。如果UIKit沒有導入,他不會足夠知道該方法沒有被解僱。 –

+0

事實上,UIkit是通過前綴頭添加的。對於一個gesturerecognizer,UIGestureRecognizerDelegate不是必需的。但嘗試從' - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer'和' - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch''返回TRUE。沒有運氣... – RickyA

0

確保指定的numberOfTapsRequirednumberOfTouchesRequired否則手勢識別器不知道應該如何處理ept作爲「水龍頭」。

tapRecogniser.numberOfTapsRequired = 1; 
tapRecogniser.numberOfTouchesRequired = 1; 
+0

根據文件這些是默認值。指定它們並沒有幫助... – RickyA

+0

XYZOverlayView應該是MKCircleView還是MKOverlayView的子類?如果你不打算使用'initWithCircle:'爲什麼不把它作爲MKOverlayView的子類呢? –