Adapting PinTintColor to Ray Wenderlich Tutorial for Mapkit

I am using the tutorial to create my first application. http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial

Ive searched for pintintcolor but nothing came up.

Mostly the tutorial uses this code to set the color.

// pinColor for disciplines: Sculpture, Plaque, Mural, Monument, other func pinColor() -> MKPinAnnotationColor{ switch discipline { case "Sculpture", "Plaque": return .Red case "Mural", "Monument": return .Purple default: return .Green 

The problem is that the apple on the developer site

https://developer.apple.com/library/mac/releasenotes/General/APIDiffsMacOSX10_11/Swift/MapKit.html

Modified MKPinAnnotationView Declaration

From:

 class MKPinAnnotationView : MKAnnotationView { var pinColor: MKPinAnnotationColor var animatesDrop: Bool } 

To:

 class MKPinAnnotationView : MKAnnotationView { class func redPinColor() -> NSColor class func greenPinColor() -> NSColor class func purplePinColor() -> NSColor var pinTintColor: NSColor! var animatesDrop: Bool var pinColor: MKPinAnnotationColor } 

The Ray Wenderlich tutorial is configured differently, so I don’t quite understand how to configure it the same way it does. I tried several different configurations, but I can't get it to work.

Any help appreciated

Greetings

+6
source share
2 answers

Instead of using the pinColor property (deprecated) use the pinTintColor property (iOS9)

 //view.pinColor = MKPinAnnotationColor.Green view.pinTintColor = UIColor.greenColor() //UIColor functions public class func blackColor() -> UIColor // 0.0 white public class func darkGrayColor() -> UIColor // 0.333 white public class func lightGrayColor() -> UIColor // 0.667 white public class func whiteColor() -> UIColor // 1.0 white public class func grayColor() -> UIColor // 0.5 white public class func redColor() -> UIColor // 1.0, 0.0, 0.0 RGB public class func greenColor() -> UIColor // 0.0, 1.0, 0.0 RGB public class func blueColor() -> UIColor // 0.0, 0.0, 1.0 RGB public class func cyanColor() -> UIColor // 0.0, 1.0, 1.0 RGB public class func yellowColor() -> UIColor // 1.0, 1.0, 0.0 RGB public class func magentaColor() -> UIColor // 1.0, 0.0, 1.0 RGB public class func orangeColor() -> UIColor // 1.0, 0.5, 0.0 RGB public class func purpleColor() -> UIColor // 0.5, 0.0, 0.5 RGB public class func brownColor() -> UIColor // 0.6, 0.4, 0.2 RGB public class func clearColor() -> UIColor // 0.0 white, 0.0 alpha 

Here's the full picture:

 import MapKit class MyAnnotation: MKAnnotation, NSObject { let identifier: String let title: String? let subtitle: String? let coordinate: CLLocationCoordinate2D init(identifier: String, title: String, subtitle: String, coordinate: CLLocationCoordinate2D) { self.identifier = identifier self.title = title self.subtitle = subtitle self.coordinate = coordinate super.init() } func mapItem() -> MKMapItem { let addressDictionary = [String(CNPostalAddressStreetKey): self.subtitle!] let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDictionary) let mapItem = MKMapItem(placemark: placemark) mapItem.name = self.title return mapItem } } func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { if let annotation = annotation as? MyAnnotation { let identifier = annotation.identifier var view = MKPinAnnotationView() if let dequeuedView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) as! MKPinAnnotationView! { view = dequeuedView view.annotation = annotation } else { view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) view.animatesDrop = true view.canShowCallout = true switch identifier { case "Sculpture", "Plaque": view.pinTintColor = UIColor.redColor() case "Mural", "Monument": view.pinTintColor = UIColor.purpleColor() default: view.pinTintColor = UIColor.greenColor() } } return view } return nil } 
+2
source

If someone else is following the tutorial and sees the following error: "MKPinAnnotationColor" is deprecated in iOS 9.0: use MKPinAnnotationView pinTintColor instead "

Just update the pinColor procedure to return UIColor instead.

 func pinColor() -> UIColor { switch discipline { case "Sculpture", "Plaque": return UIColor.redColor() case "Mural", "Monument": return UIColor.purpleColor() default: return UIColor.greenColor() } } 

And then make the appropriate call to set pinTintColor as follows:

  view.pinTintColor = annotation.pinColor() 
+6
source

Source: https://habr.com/ru/post/1231933/


All Articles