如何在Swift中显示MKMapview上的MKPinAnnotationView

3

我正在尝试将自定义注释视图应用到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添加到地图时,会出现数据类型无效的错误。有人知道如何在地图上实际渲染带有自定义视图的标注吗?

最好的解决方案是简单明了。

谢谢!


1
希望这篇文章能够更好地帮助你:http://www.raywenderlich.com/87008/overlay-views-mapkit-swift-tutorial - Viral Savaj
1个回答

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

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

不,这是错误的。
你不需要直接传递参数等给该方法,因为viewForAnnotation方法是一个委托方法,你需要实现它,但不需要直接调用它。
地图视图(MKMapView)将调用该方法并传递参数等。 viewForAnnotation委托方法是您可以为给定注释模型对象提供自定义视图的位置。
为确保地图视图调用您的委托方法,您必须执行以下操作之一:
  • 确保地图视图的delegate插座在storyboard中连接到其视图控制器,或者
  • 通常在viewDidLoad中编写代码,执行mapView.delegate = self

当您调用addAnnotation时,您会将注释模型对象(例如MKPointAnnotation或任何实现MKAnnotation协议的内容)传递给它。
因此,这行代码:
map.addAnnotation(mapView(myMap, viewForAnnotation: point))

应该是这样的:
map.addAnnotation(point)

一个MKPinAnnotationView对象(以及任何子类MKAnnotationView)是某个注释模型对象的视图 - 它们不是同一件事情。
这些问题和主题已经在iOS和MapKit文档、SO和其他可用的教程中多次涵盖过。
以下是几个与之相关的SO问题,您可能会发现有用:

谢谢,这解决了我的问题并让它变得更加清晰。 - Matt Spoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接