拖动时更新 MKPointAnnotation 对象
Posted
技术标签:
【中文标题】拖动时更新 MKPointAnnotation 对象【英文标题】:Update MKPointAnnotation object while dragging 【发布时间】:2016-08-04 08:26:40 【问题描述】:我想知道如何在拖动时更新我的 annotation
标题,因为所有 annotation
属性都仅限于 get
。
我尝试过的代码:
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState)
switch (newState)
case .starting:
//view.dragState = .dragging
print("dragging.....")
case .ending, .canceling:
// view.dragState = .none
let lat = view.annotation?.coordinate.latitude
let long = view.annotation?.coordinate.longitude
let coordinates = CLLocationCoordinate2D(latitude: lat!, longitude: long!)
print(" pin lat \(lat) long \(long)")
//Error here - title is get only property
view.annotation?.title = "New Location"
default: break
【问题讨论】:
【参考方案1】:在MKMapViewDelegate
的拖动方法中,注解是只读的,所以你可以使用MKMapViewDelegate
的didSelectAnnotationView
方法,因为在拖动之前它会调用didSelectAnnotationView
方法,为此声明一个selectedAnnotation
类型的实例属性MKPointAnnotation
.
var selectedAnnotation: MKPointAnnotation?
现在在didSelectAnnotationView
方法中使用这个属性。
func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView)
selectedAnnotation = view.annotation as? MKPointAnnotation
现在要更改标题,请使用此注释
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, didChange newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState)
switch (newState)
case .starting:
//view.dragState = .dragging
print("dragging.....")
case .ending, .canceling:
// view.dragState = .none
let lat = view.annotation?.coordinate.latitude
let long = view.annotation?.coordinate.longitude
let coordinates = CLLocationCoordinate2D(latitude: lat!, longitude: long!)
print(" pin lat \(lat) long \(long)")
self. selectedAnnotation?.title = "New Location"
default: break
【讨论】:
欢迎朋友,快乐编码:)以上是关于拖动时更新 MKPointAnnotation 对象的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 MKPointAnnotation 不是自定义的?