【问题标题】:How to display MKPinAnnotationView on MKMapview in swift如何快速在 MKMapview 上显示 MKPinAnnotationView
【发布时间】:2015-04-18 08:23:27
【问题描述】:

我正在尝试在 MKMapView 中的引脚上实现自定义注释视图。另一个用户给了我这个函数来生成一个自定义的 MKPinAnnotationView。 https://stackoverflow.com/users/3845091/zisoft

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if annotation is PinAnnotation {
    let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "myPin")

    pinAnnotationView.pinColor = .Purple
    pinAnnotationView.draggable = true
    pinAnnotationView.canShowCallout = true
    pinAnnotationView.animatesDrop = true

    let deleteButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
    deleteButton.frame.size.width = 44
    deleteButton.frame.size.height = 44
    deleteButton.backgroundColor = UIColor.redColor()
    deleteButton.setImage(UIImage(named: "trash"), forState: .Normal)

    pinAnnotationView.leftCalloutAccessoryView = deleteButton

    return pinAnnotationView
}

return nil

}

我会将我想要的地图参数和我想要自定义的注释传递给函数。即mapView(myMap, viewForAnnotation: point)

这一切都很好,也很有意义,但是,当我尝试使用
map.addAnnotation(mapView(myMap, viewForAnnotation: point)) 将 MKPinAnnotationView 添加到地图时,它会出错,提示数据类型无效。有人知道如何使用自定义视图在地图上物理渲染图钉吗?

简单的解决方案总是最好的。

谢谢!

【问题讨论】:

标签: ios iphone swift annotations maps


【解决方案1】:

在您的问题中,您提到了viewForAnnotation 方法:

我会将我想要的地图参数传递给函数 以及我要自定义的注释。即地图视图(我的地图, viewForAnnotation: 点)

不,这是错误的。

不会向函数传递参数等。

viewForAnnotation 方法是您实现的 delegate 方法,但不是由您直接调用。

地图视图 (MKMapView) 将调用它并向函数传递参数等。

viewForAnnotation 委托方法是您可以为给定的注释 model 对象提供自定义 view 的地方。

要确保地图视图调用您的委托方法,您必须:

  • 确保地图视图的delegate 出口已连接到情节提要中的视图控制器,或者
  • 在代码中,通常在viewDidLoad,做mapView.delegate = self


当您调用addAnnotation 时,您将注释model 对象(例如MKPointAnnotation 或任何实现MKAnnotation 协议的对象)传递给它。

所以这一行:

map.addAnnotation(mapView(myMap, viewForAnnotation: point))

应该是这样的:

map.addAnnotation(point)

MKPinAnnotationView 对象(以及 MKAnnotationView 的任何子类)是某些注释 model 对象的 视图 -- 它们不是同一个东西。 p>


这些问题和主题已经在 iOS 和 MapKit 文档、SO 和其他地方可用的教程中多次讨论。

这里只是一些关于 SO 的相关问题,您可能会觉得有用:

【讨论】:

  • 谢谢,这解决了我的问题,让我更清楚了。
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多