使用UIGestureRecognizer在MKOverlayView上捕获手势事件

时间:2011-03-03 14:41:37

标签: iphone cocoa-touch mapkit

我尝试使用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

4 个答案:

答案 0 :(得分:0)

您忘记在界面中实施UIGestureRecognizerDelegate,您必须导入UIKit
#import <UIKit/UIKit.h>
@interface XYOverlayView : MKCircleView <UIGestureRecognizerDelegate>

答案 1 :(得分:0)

请务必指定numberOfTapsRequirednumberOfTouchesRequired,否则手势识别器不知道接受什么作为“点按”。

tapRecogniser.numberOfTapsRequired = 1;
tapRecogniser.numberOfTouchesRequired = 1;

答案 2 :(得分:0)

没有让这个工作。切换到自定义MKAnnotationView以捕获手势。这也具有窗口中的可拍区域保持相同尺寸的优点。

答案 3 :(得分:0)

我认为我的答案可能是一个解决方案:MKOverlayView and touches