我是iOS开发和mapbox的新手,很抱歉,如果问题听起来很愚蠢,但我无法在任何地方找到答案。 我有一张地图和注释。我想在用户触摸并按住注释(长按手势)时显示其他一些信息。我得到了长按手势,但是找到了找到触摸的注释的方法,或者至少是它的索引。到目前为止,我有这样的想法:
class eventsMapController: UIViewController, MGLMapViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
mapView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
// Set the map's bounds to Oslo 59.920269,10.71167
//let bounds = MGLCoordinateBounds(sw: CLLocationCoordinate2D(latitude: 59.925861, longitude: 10.712185),
// ne: CLLocationCoordinate2D(latitude: 59.889798, longitude: 10.794754))
view.addSubview(mapView)
// Set the map view‘s delegate property
mapView.delegate = self
let myGesture = UILongPressGestureRecognizer(target: self, action: #selector(eventsMapController.testLongGesture))
myGesture.minimumPressDuration = 0.8
mapView.addGestureRecognizer(myGesture)
}
func testLongGesture(long: UILongPressGestureRecognizer){
if long.state == .Began{
print("begin", long)
}
}
}
我正在添加这样的注释
let pointAnotation = MGLPointAnnotation()
pointAnotation.coordinate = CLLocationCoordinate2DMake(event.lat, event.lng)
pointAnotation.title = name
pointAnotation.subtitle = headline
self.mapView.addAnnotation(pointAnotation)
请帮助我一个人,我花了很多时间试图解决这个问题。
答案 0 :(得分:4)
我认为我尝试的第一件事就是实现委托方法mapView(_:didSelectAnnotation:)
。我不确定是否会在长时间按下时调用它,但如果是这样,它会通过告诉您使用哪个注释来使事情变得相对简单。
如果没有,您可能需要执行以下操作:
找出与长按位置对应的地图坐标。类似的东西:
let longPressPoint : CGPoint = long.locationInView(mapView)
let longPressCoordinate = mapView.convertPoint(longPressPoint, toCoordinateFromView:mapView)
这会为您提供与长按位置相对应的CLLocationCoordinate2D
。
运行您的注释,将每个坐标与长按坐标进行比较,找到一个接近长按的坐标。请注意,长按可能不会出现任何注释,因此请勿自动选择最近的注释。