Swift-MKPointAnnotation自定义图钉图像

时间:2018-07-08 22:55:39

标签: ios swift mkannotationview

我正在使用Swift 3和Xcode 10 beta 3,我需要在地图上的图钉使用自定义图像。我需要避免使用红色注释针,并使用为此制作的一些自定义徽标。我尝试了所有在堆栈上找到的解决方案,但没有任何帮助。这是我的代码:

Jack

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

我通常的做法是创建一个新的swift文件,它将是您的自定义注释,该注释继承自MKAnnoatation。下面的例子

import MapKit

class MyAnnotation: NSObject, MKAnnotation {
    let title: String?
    let subtitle: String?
    let coordinate: CLLocationCoordinate2D
    var image: UIImage? = nil

    init(title: String, subtitle: String, coordinate: CLLocationCoordinate2D) {
        self.title = title
        self.subtitle = subtitle
        self.coordinate = coordinate
        //self.image
        super.init()
    }

您需要在必须使用CLCoordinate的地方初始化注释。然后使用您的自定义图像设置image属性。 MyAnnotation.image = "myImage.png". You will then need to add your annotation to your map view mapView.addAnnotations(MyAnnotation)。 我还从MKMapViewDelegate实现以下方法(确保您在类中继承了此方法)。这样一来,用户就可以点击注释并接收有关注释的信息。希望这会有所帮助。

在您的视图控制器中:

let marker = MyAnnotation(title: "title" as! String, subtitle: "subtitle" as! String, coordinate: CLLocationCoordinate2D(latitude: latitude, longitude: longitude))
marker.image = UIImage("my image.png")
self.mapView.addAnnotations(marker)

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if let annotation = annotation as? MyAnnotation {
            let identifier = "identifier"
            annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
            annotationView?.image = annotation.image //add this
            annotationView?.canShowCallout = true
            annotationView?.calloutOffset = CGPoint(x: -5, y: 5)
            annotationView?.rightCalloutAccessoryView = UIButton(type: .detailDisclosure) as UIView
            return annotationView
        }
    return nil
    }`