将PinTintColor调整为适用于mapkit的Ray Wenderlich教程

tra*_*vis 6 xcode mapkit ios swift

我正在使用教程来构建我的第一个应用程序.http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial

我搜索了pintintcolor但没有出现.

基本上,本教程使用此代码来设置颜色

// 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
Run Code Online (Sandbox Code Playgroud)

麻烦就是这就是苹果在开发者网站上的含义

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

修改了MKPinAnnotationView声明

从:

class MKPinAnnotationView : MKAnnotationView {
    var pinColor: MKPinAnnotationColor
    var animatesDrop: Bool
}
Run Code Online (Sandbox Code Playgroud)

至:

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

Ray Wenderlich教程设置有点不同,所以我不太明白如何设置它的方式与它相同.我尝试了一些不同的配置,但我无法让它工作.

任何帮助赞赏

干杯

Dav*_*own 6

其他任何人都在关注本教程并看到以下错误:"'MKPinAnnotationColor'在iOS 9.0中已弃用:请改用MKPinAnnotationView的pinTintColor"

只需更新pinColor例程即可返回UIColor.

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

然后进行相应的调用以设置pinTintColor,如下所示:

  view.pinTintColor = annotation.pinColor()
Run Code Online (Sandbox Code Playgroud)


Thi*_*guy 2

使用属性 pinTintColor (iOS9),而不是使用属性 pinColor(已弃用)

//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 
Run Code Online (Sandbox Code Playgroud)

这是完整的图片:

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
}
Run Code Online (Sandbox Code Playgroud)