Swift - 使用UISwitch更改引脚颜色

时间:2017-02-04 18:46:34

标签: ios swift uiswitch mkpinannotationview

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

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

我的开关已连接:

@IBOutlet weak var LegacySwitch: UISwitch!

我在ViewDidLoad中创建了我的图钉。引脚的坐标来自另一个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)

当我运行应用程序时,引脚仍然是红色的。当我使用断点告诉我它运行时遇到Action。

修改 我忘了提一下,我在ViewDidLoad上面创建了一个注释变量。

var annotation = MyPointAnnotation()

我还有一个MKPointAnnotation Class

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
}

1 个答案:

答案 0 :(得分:2)

区分:

  • 注释:轻量级特征

  • 注释视图:您通过调用地图视图委托mapView(_:viewFor:)根据注释提供的内容。< / p>

你正在改变前者而不是后者。这方面的所有操作都发生在mapView(_:viewFor:)中,但是您没有表明 - 也没有任何特殊原因可以仅仅因为您更改某个实例变量中的注释属性而调用它。您需要在地图替换注释,以便重新生成注释视图。