自定义 MKAnnotationView swift:func mapView 什么都不做
custom MKAnnotationView swift: func mapView does nothing
我正在尝试使用 MapKit 在地图上设置图像而不是图钉。我知道我必须设置自定义 MKAnnotationView
。因此我应该执行以下几行:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if !(annotation is CustomPointAnnotation) {
return nil
}
let reuseId = "test"
var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
anView.canShowCallout = true
}
else {
anView.annotation = annotation
}
//Set annotation-specific properties **AFTER**
//the view is dequeued or created...
let cpa = annotation as CustomPointAnnotation
anView.image = UIImage(named:cpa.imageName)
return anView
}
但它在我的代码中根本不起作用。我 copy/pasted 来自此 post 的所有代码,将名为 1.png 的图像添加到我的支持文件中。但是地图显示的是红色图钉而不是 1.png 图像。
看来整个mapView功能都没用了。我必须在 viewDidLoad 中调用它吗?我应该如何使用它?另外,reuseId 是做什么用的?我应该在哪里调用它?
感谢您的回答,新年快乐。
确保 MKMapView 的委托正确链接到实现该方法的 ViewController。
您可以在 "viewWillAppear" 方法中这样做:mapView.delegate = self;
或者在InterfaceBuilder中:
- 确保您的 MapKit View 被选中
- 转到 "Connections Inspector"
- 在 "Outlets" 部分,将 "delegate" 属性拖放到实现委托方法
的 ViewController
我正在尝试使用 MapKit 在地图上设置图像而不是图钉。我知道我必须设置自定义 MKAnnotationView
。因此我应该执行以下几行:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if !(annotation is CustomPointAnnotation) {
return nil
}
let reuseId = "test"
var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
anView.canShowCallout = true
}
else {
anView.annotation = annotation
}
//Set annotation-specific properties **AFTER**
//the view is dequeued or created...
let cpa = annotation as CustomPointAnnotation
anView.image = UIImage(named:cpa.imageName)
return anView
}
但它在我的代码中根本不起作用。我 copy/pasted 来自此 post 的所有代码,将名为 1.png 的图像添加到我的支持文件中。但是地图显示的是红色图钉而不是 1.png 图像。
看来整个mapView功能都没用了。我必须在 viewDidLoad 中调用它吗?我应该如何使用它?另外,reuseId 是做什么用的?我应该在哪里调用它?
感谢您的回答,新年快乐。
确保 MKMapView 的委托正确链接到实现该方法的 ViewController。
您可以在 "viewWillAppear" 方法中这样做:mapView.delegate = self;
或者在InterfaceBuilder中: - 确保您的 MapKit View 被选中 - 转到 "Connections Inspector" - 在 "Outlets" 部分,将 "delegate" 属性拖放到实现委托方法
的 ViewController