我正在使用Swift 3和Xcode 10 beta 3,我需要在地图上的图钉使用自定义图像。我需要避免使用红色注释针,并使用为此制作的一些自定义徽标。我尝试了所有在堆栈上找到的解决方案,但没有任何帮助。这是我的代码:
Jack
我应该怎么做?
答案 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
}`