2015-09-21 12 views
5

Sto utilizzando un tutorial per creare la mia prima app. http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorialAdattamento del tutorial PinTintColor a Ray Wenderlich per mapkit

Ive ha cercato di pintintcolor ma non viene visualizzato nulla.

Fondamentalmente il tutorial utilizza questo codice per impostare il colore

// 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 

Il guaio è questo è quello che Apple ha sul sito sviluppatori

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

Modificato MKPinAnnotationView Dichiarazione

Da:

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

A:

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

Il tutorial Ray Wenderlich è l'installazione di un bel po 'diverso, quindi non capisco come impostare fino allo stesso modo come esso. Ho provato alcune configurazioni diverse ma non riesco a farlo funzionare.

Qualsiasi aiuto apprezzato

Acclamazioni

risposta

2

Invece di immobili uso pinColor (deprecato), utilizzare la proprietà pinTintColor (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 

Ecco il quadro completo:

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 
} 
+0

Così ho provato questo, invece di quello che ho scritto in origine // pinColor per le discipline: Scultura, Targa, Murale, Monumento, altro func pinTintColor() -> UIColor { interruttore disciplina { caso "Scultura", "Targa": ritorno .grayColor() caso "Mural", "monumento": re turn .purpleColor() default: return .orangeColor() Non ottiene errori ma non cambia il colore dei pin? – travis

+0

Funziona, dimentica di cambiare pincolor in pinTintColor in VCMapView. Grazie per l'aiuto! – travis

+0

Ok, buona fortuna. Non dimenticare di votare su arrow up nel mio post =) –

6

Incase chiunque altro sta seguendo il tutorial e sta vedendo il seguente errore: "'M KPinAnnotationColor 'è obsoleto in iOS 9.0: Usa pinTintColor di MKPinAnnotationView invece "

Aggiornare semplicemente la routine pinColor per restituire un UIColor.

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

e quindi effettuare la chiamata corrispondente per impostare il pinTintColor in questo modo:

view.pinTintColor = annotation.pinColor()