我无法为地图注释设置引脚颜色。我在我的MapView视图控制器中有一个函数,它从另一个视图控制器中拉出一个数组,并且根据类型的情况,我想要地图视图的不同引脚颜色。我不知道如何将pin颜色信息添加到此switch语句中的注释中。我对注释的理解相当薄弱,因此非常感谢任何解释,而不是解决方案本身。
class ColorPointAnnotation: MKPointAnnotation {
var pinColor: UIColor
init(pinColor: UIColor) {
self.pinColor = pinColor
super.init()
}
}
func add(newLocation location_one:[String:Any]) {
let momentaryLat = (location_one["latitude"] as! NSString).doubleValue
let momentaryLong = (location_one["longitude"] as! NSString).doubleValue
var annotation = MKPointAnnotation()
switch location_one["type"] {
case "Tomorrow":
print("The pin color is red")
annotation = ColorPointAnnotation(pinColor: UIColor.red)
case "Next Week":
print("The pin color is green")
annotation = ColorPointAnnotation(pinColor: UIColor.green)
default:
print("The pin color is purple")
annotation = ColorPointAnnotation(pinColor: UIColor.purpleColor)
}
annotation.title = location_one["title"] as? String
annotation.coordinate = CLLocationCoordinate2D(latitude: momentaryLat as CLLocationDegrees, longitude: momentaryLong as CLLocationDegrees)
DispatchQueue.main.async {
self.map.addAnnotation(annotation)
}
self.map.centerCoordinate = annotation.coordinate
}
func mapView(_ map: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
// if (annotation is MKUserLocation) {
// return nil
// }
let identifier = "pinAnnotation"
var annotationView = map.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView?.canShowCallout = true
let colorPointAnnotation = annotation as! ColorPointAnnotation
annotationView?.pinTintColor = colorPointAnnotation.pinColor
}
// else {
// annotationView?.annotation = annotation
//
// }
// map.showAnnotations(map.annotations, animated: true)
return annotationView
}
答案 0 :(得分:2)
您需要将switch语句移动到viewForAnnotation委托方法中。返回销钉时,您可以自定义颜色,然后将其返回。
像这样:
annotation.pinColor = MKPinAnnotationColorGreen;
更新的答案:
您可以继承MKPointAnnotation,并添加存储注释类型的属性。
在add方法中创建注释时,请将该属性设置为任何类型的引脚。
现在在viewForAnnotation方法中,mapkit将给出您的类型的注释。查看set属性并确定要返回的颜色引脚。
如果您想查看一些代码,请告诉我。