编辑:将标题从“双击..”更改为“双击选择..”
我需要在我的应用中至少检测到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/