Я хочу изменить цвет штыря от красного до фиолетового, как только переключатель включен. До сих пор я пытался:Swift - с помощью UISwitch для изменения цвета штекера
@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)
Когда я запускаю приложение, контакт продолжает оставаться красным. Действие встречается, поскольку я использовал контрольную точку, чтобы сказать, что она работает.
EDIT Я забыл упомянуть, я создал переменную аннотации над 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
}
Это потому, что вы не можете просто добавить что-либо * определенное * в viewDidLoad (включая «аннотацию») и ожидать ссылки на него повсюду в контроллере представления. Либо определите его как глобальную переменную, либо зациклируйте коллекцию аннотаций в «LocationMap» (если возможно), чтобы изменить все из них. Это то же самое с любым подзоном. – dfd
Я создал его как переменную над viewDidLoad. Я отредактировал свой вопрос, чтобы отразить это сейчас. –
'if LegacySwitch.isOn == true' является избыточным. Не нужно включать '== true'. Также тройной оператор будет лучше, чем если бы он был условным. 'annotation.pinTintColor = LegacySwitch.isOn? .purple: .red' –