Это то, что у меня сейчас все еще не работает. Обратите внимание на строки комментариев для цвета. Я пытаюсь сделать булавку Olso стандартной красной. Но я хотел бы изменить цвет лондонской булавки, чтобы он не был красным. Таким образом, 2 разных контакта будут иметь разные цвета.
ВИДКОНТРОЛЛЕР
import MapKit
import UIKit
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet weak var mapView: MKMapView!
//color
let annotation = ColorPointAnnotation(pinColor: UIColor.blueColor())
override func viewDidLoad() {
super.viewDidLoad()
let london = Capital(title: "London", coordinate: CLLocationCoordinate2D(latitude: 51.507222, longitude: -0.1275), info: "Home to the 2012 Summer Olympics.")
let oslo = Capital(title: "Oslo", coordinate: CLLocationCoordinate2D(latitude: 59.95, longitude: 10.75), info: "Founded over a thousand years ago.")
mapView.addAnnotations([london, oslo])
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
// 1
let identifier = "Capital"
// 2
if annotation is Capital {
// 3
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
if annotationView == nil {
//4
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView!.canShowCallout = true
//color
let colorPointAnnotation = annotation as! ColorPointAnnotation
annotationView?.pinTintColor = colorPointAnnotation.pinColor
// 5
let btn = UIButton(type: .detailDisclosure)
annotationView!.rightCalloutAccessoryView = btn
} else {
// 6
annotationView!.annotation = annotation
}
return annotationView
}
// 7
return nil
}
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
let capital = view.annotation as! Capital
let placeName = capital.title
let placeInfo = capital.info
let ac = UIAlertController(title: placeName, message: placeInfo, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
}
}
СТОЛИЦА
import MapKit
import UIKit
class Capital: NSObject, MKAnnotation {
var title: String?
var coordinate: CLLocationCoordinate2D
var info: String
init(title: String, coordinate: CLLocationCoordinate2D, info: String) {
self.title = title
self.coordinate = coordinate
self.info = info
}
}
ColorPointAnnotation
.) Затем, когда карте необходимо отобразить аннотацию, она вызывает ваш методmapView(!_:viewFor:)
. Это передает вам объект аннотации, и вы используете его для настройки объекта аннотации view. Похоже, ваш классColorPointAnnotation
имеет свойствоpinColor
. Если вы установите цвет объекта аннотации для Лондона на цвет, отличный от красного, то булавка Лондона должна использовать этот цвет. - person Duncan C   schedule 24.01.2017