我试图在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)
这一切都很好,但是,当我尝试将MKPinAnnotationView添加到地图中时,使用
map.addAnnotation(mapView(myMap, viewForAnnotation: point))
指出数据类型无效的错误。有谁知道如何用定制的视图在地图上渲染引脚吗?
一个简单的解决方案总是最好的。
谢谢!
发布于 2015-04-18 11:51:49
在您的问题中,您提到了viewForAnnotation方法:
我会传递函数,我想要它的映射的参数,以及我想要定制的注释。即mapView(myMap,viewForAnnotation: point)
不,这是错误的。
You不会传递函数参数等。
该viewForAnnotation方法是您实现的委托方法,但不是由您直接调用的。
地图视图 (MKMapView)将调用它并传递函数参数等。
viewForAnnotation委托方法可以为给定的注释模型对象提供自定义的视图。
要确保map视图调用您的委托方法,您必须:
delegate插座连接到故事板中的视图控制器,或者viewDidLoad中,执行mapView.delegate = self。
当您调用addAnnotation时,传递给它注释模型对象(例如。MKPointAnnotation或实现MKAnnotation协议的任何东西)。
所以这句话:
map.addAnnotation(mapView(myMap, viewForAnnotation: point))应该是这样的:
map.addAnnotation(point)MKPinAnnotationView对象(以及子类MKAnnotationView)是一些注释模型对象的视图 --它们不是相同的东西。
这些问题和主题已经在iOS和MapKit文档、SO和其他地方可用的教程中多次讨论过。
以下是几个相关的问题,您可能会发现这些问题很有用:
https://stackoverflow.com/questions/29714784
复制相似问题