打开开关后,我想将管脚颜色从红色改为紫色。到目前为止,我试过:

@IBAction func SwitchChanged(_ sender: Any){
  if LegacySwitch.isOn == true {
   annotation.pinTintColor = .purple
  } else {
   annotation.pinTintColor = .red
  }
}

我的交换机连接到:
@IBOutlet weak var LegacySwitch: UISwitch!

我在ViewDidLoad中创建了我的pin。管脚的坐标来自另一个ViewController。
//Map Stuff
    let Coordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    annotation.coordinate = Coordinates
    LocationMap.addAnnotation(annotation)
    let center = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))
    self.LocationMap.setRegion(region, animated: true)

当我运行应用程序时,密码会继续变红。在我使用断点告诉我操作已运行时遇到该操作。
编辑
我忘了说,我在ViewDidLoad上面创建了注释变量。
var annotation = MyPointAnnotation()

我还有一个MKPointAnnotation类
class MyPointAnnotation: MKPointAnnotation {
    var pinTintColor: UIColor?
}

不起作用的事情:
 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
    if LegacySwitch.isOn {
        annotationView.pinTintColor = .purple
    } else {
        annotationView.pinTintColor = .red
    }

    return annotationView
}

最佳答案

区分:
注释:轻量级特性包
注释视图:您看到的内容,通过调用地图视图委托的mapView(_:viewFor:)在注释的基础上提供。
你正在改变前者,而不是后者。在这方面的所有操作都发生在mapView(_:viewFor:)中,但是您并没有显示出这一点,也没有任何特定的原因说明为什么仅仅因为您更改了某个实例变量中的注释的属性而调用它。您需要替换地图中的注释,以便重新生成注释视图。

10-07 22:09