回答
你可以使用这个UILongPressGestureRecognizer。无论你创建或初始化的MapView,第一识别器连接到它:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //user needs to press for 2 seconds
[self.mapView addGestureRecognizer:lpgr];
[lpgr release];
然后在手势处理机:
- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateBegan)
return;
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
YourMKAnnotationClass *annot = [[YourMKAnnotationClass alloc] init];
annot.coordinate = touchMapCoordinate;
[self.mapView addAnnotation:annot];
[annot release];
}
YourMKAnnotationClass是你定义符合MKAnnotation协议的类。如果您的应用只能在iOS 4.0或更高版本上运行,则可以使用预定义的MKPointAnnotation类。
有关创建您自己的MKAnnotation类的示例,请参阅示例应用程序WeatherMap和MapCallouts。
感谢安娜提供这样一个很好的答案!如果有人感兴趣,这里是一个Swift版本(答案已经更新为Swift 3.0语法)。
创建UILongPressGestureRecognizer:
let longPressRecogniser = UILongPressGestureRecognizer(target: self, action: #selector(MapViewController.handleLongPress(_:)))
longPressRecogniser.minimumPressDuration = 1.0
mapView.addGestureRecognizer(longPressRecogniser)
处理手势:
func handleLongPress(_ gestureRecognizer : UIGestureRecognizer){
if gestureRecognizer.state != .began { return }
let touchPoint = gestureRecognizer.location(in: mapView)
let touchMapCoordinate = mapView.convert(touchPoint, toCoordinateFrom: mapView)
let album = Album(coordinate: touchMapCoordinate, context: sharedContext)
mapView.addAnnotation(album)
}
哇......我没有注意到这一点,花了很长时间把它转换。 – 2015-05-25 19:14:51
可以使用_ ** let longPressRecogniser = UILongPressGestureRecognizer(target:self,action:“handleLongPress:”)** _ – 2015-10-07 05:13:06
@Dx_ yes您可以使用,因为识别器未被修改。识别器中的属性正在修改中。 – 3366784 2016-08-07 18:02:32
- 1. iOS - 将触摸手势添加到UITextField
- 2. 如何将触摸指针添加到应用程序?
- 3. 如何转发触摸MKMapView
- 4. MKMapView触摸事件
- 5. UIButton在添加到子视图时未收到触摸,但在添加到主视图时未收到触摸
- 6. 如何为MKMapView创建触摸事件?
- 7. 如何在Google VR iOS Pod上添加触摸手势?
- 8. 快速添加单针MKMapView?
- 9. MKAnnotationView从MKMapView盗取触摸
- 10. MkMapView在触摸屏上放下一个别针
- 11. MapView在触摸时添加图钉
- 12. 如何通过触摸将图像添加到视图?
- 13. 如何将触摸事件添加到UIView的子视图?
- 14. 如何将触摸事件添加到UIView?
- 15. 如何将无状态组件添加到可触摸组件
- 16. 如何将触摸控件添加到libGDX中的对象?
- 17. 如何重置NSTimer的触摸,触摸移动在ios
- 18. 将触摸屏添加到非触控Android设备
- 19. 在IOS 8的MKMapView上添加按钮
- 20. 平移和缩放时,MkMapView在触摸事件时不响应?
- 21. 如何异步添加批注到MKMapView?
- 22. Swift - 向UIImageView添加触摸
- 23. 添加触摸国与jQuery
- 24. iPhone SDK:将文本添加到MKMapView
- 25. 如何在将行添加到Silverlight DataGrid时触发动画
- 26. 如何在将新AMI添加到区域时触发事件
- 27. iPhone编码 - 如何添加旋转到触摸事件?
- 28. 我如何触摸事件添加到jQuery的是iPad上
- 29. 在iOS中跟踪触摸
- 30. 触摸IOS中的视图时可以触摸点吗?
谢谢你,它的工作 – 2010-10-18 17:58:12
真棒回答,谢谢。就我个人而言,我将if语句翻转成了一个'==',所以如果*不是*'UIGestureRecognizerStateBegan',它就会返回。这样做会在指定的时间后丢弃指针,即使用户仍然拿着我想要的地图(以及官方地图应用程序如何操作)。 – 2011-05-07 07:42:08
我只想说我将自己的答案贯彻到了我的项目中,并且它像一个魅力一样工作。谢谢你最好的回答。 – DoubleDunk 2011-07-04 05:31:27