编辑:将标题从“双击..”更改为“双击选择..”

我需要在我的应用中至少检测到MKPinAnnotationView的第二次触摸。目前,我可以进行第一次触摸(我在这里使用kvo:Detecting when MKAnnotation is selected in MKMapView),并且第一次触摸时效果很好),但是如果我再次点击该图钉,则不会进行任何操作,因为已选择价值不变。自ios 4起,我使用“ mapView:didSelectAnnotationView:”进行了相同的尝试,但是在第二次点击时也不会再次调用它。

如果有人可以帮助我,那就太好了!

最好的祝福

编辑,添加更多信息:

因此,触摸不必很快,如果用户触摸图钉,则在注释的标题和副标题中显示一条消息,如果用户再次触摸相同的图钉,那么我将用它来做另一件事

最佳答案

创建一个UITapGestureRecognizer并将numberOfTapsRequired设置为2。将此手势识别器添加到您的MKPinAnnotationView实例。此外,您将需要将控制器设置为手势识别器的委托人,并实现-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:并返回YES以防止手势识别器踩踏MKMapView内部使用的手势。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation)annotation
{
    // Reuse or create annotation view

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapRecgonized:)];
    doubleTap.numberOfTapsRequired = 2;
    doubleTap.delegate = self;
    [annotationView addGestureRecognizer:doubleTap];
}

- (void)doubleTapRecognized:(UITapGestureRecognizer *)recognizer
{
    // Handle double tap on annotation view
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGesture
{
    return YES;
}




编辑:对不起,我误会了。您所描述的内容应该可以使用-mapView:didSelectAnnotationView:并且手势识别器仅配置为需要1次轻敲。这个想法是,我们只会在选择手势识别器时将其添加到注释视图中。取消选择注释视图时,我们将其删除。这样,您就可以处理-tapGestureRecognized:方法中的缩放,并且确保仅在注释已被点击的情况下才执行缩放。

为此,我将姿势识别器添加为您的类的属性,并在-viewDidLoad中对其进行配置。假设它声明为@property (nonatomic, strong) UITapGestureRecognizer *tapGesture;并且我们正在使用ARC。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
}

- (void)tapGestureRecognized:(UIGestureRecognizer *)gesture
{
    // Zoom in even further on already selected annotation
}

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView
{
    [annotationView addGestureRecognizer:self.tapGesture];
}

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)annotationView
{
    [annotationView removeGestureRecgonizer:self.tapGesture];
}

关于iphone - 双击MKPinAnnotationView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8805823/

10-09 06:29