Tig*_*yan 5 mapkit ios mapkitannotation swift
我正在尝试注册自定义注释视图(我将它们创建为 MKAnnotationView 的子类),但是我遇到了一些麻烦。最初,我尝试使用以下代码为单个注释标记仅注册一个自定义注释视图(RestaurantMarkerView 是我的自定义注释视图):
mapView.register(RestaurantMarkerView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
Run Code Online (Sandbox Code Playgroud)
它工作正常(当我点击图钉时,它会显示标注)。现在我添加另一个注释标记并尝试为其注册另一个视图,据我所知,在这种情况下,我应该为视图使用自定义标识符,因此我通过以下代码执行此操作:
mapView.register(RestaurantMarkerView.self, forAnnotationViewWithReuseIdentifier: "a")
mapView.register(ChoosenRestaurantMarkerView.self, forAnnotationViewWithReuseIdentifier: "b")
Run Code Online (Sandbox Code Playgroud)
现在,当我点击标记时,它们不会显示标注。当我将其中一个标记的重用标识符更改为 时MKMapViewDefaultAnnotationViewReuseIdentifier,该标记会显示标注。那么,如何注册多个自定义注释视图?谢谢。
正如@Paulw 所说,您需要实现该MKMapViewDelegate函数mapView(_:viewFor:)以返回适当的视图。
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
if /* condition */ {
let reuseId = "a"
var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if pinView == nil {
pinView = RestaurantMarkerView(annotation: annotation, reuseIdentifier: reuseId)
pinView?.canShowCallout = true
} else {
pinView?.annotation = annotation
}
return pinView
} else {
let reuseId = "b"
var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if pinView == nil {
pinView = ChoosenRestaurantMarkerView(annotation: annotation, reuseIdentifier: reuseId)
pinView?.canShowCallout = true
} else {
pinView?.annotation = annotation
}
return pinView
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3198 次 |
| 最近记录: |