gpt4 book ai didi

ios - 注释引脚颜色和类型

转载 作者:行者123 更新时间:2023-11-29 11:25:28 25 4
gpt4 key购买 nike

我的应用有一个方法可以给 map 添加注释

 var annotationArray = [MyAnnotation]()
var allAnnotations: [(objLat: CLLocationDegrees, objLong: CLLocationDegrees, objName: String, objDesc: String, objId: String)] = []

func addAnnotationsToMap() {
annotationArray = []
for oneObject in self.allAnnotations {
let oneAnnotation = MyAnnotation()
let oneObjLoc: CLLocationCoordinate2D = CLLocationCoordinate2DMake(oneObject.objLat, oneObject.objLong)
oneAnnotation.coordinate = oneObjLoc
oneAnnotation.title = oneObject.objName
oneAnnotation.subtitle = oneObject.objDesc
oneAnnotation.mapId = oneObject.objId

self.annotationArray.append(oneAnnotation)
}
self.map.addAnnotations(self.annotationArray)
self.allAnnotations = []
self.annotationArray = []
}

MyAnnotation 是

import UIKit
import MapKit

class MyAnnotation: MKPointAnnotation {
var mapId = String()
var phone1 = String()
var phone2 = String()
var specialty1 = String()
var specialty2 = String()
}

根据 specialty1 类型,我想要不同的 Pin 颜色(和类型),我正在尝试使用下面的方法。停止显示的一件事是 Pin 标题很难(这是我想保留的东西)

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: nil)

annotationView.pinTintColor = UIColor.red

return annotationView
}

我的想法是使用下面不同颜色的 Pin 图

Pin

如果我删除 viewFor Annotation,我会得到一个带有标题的 Pin 图。

有几篇文章展示了如何向注释添加不同的颜色,但它们都使用 addAnnotation 而不是 addAnnotations。

我错过了什么?有什么办法可以满足我的需求吗?

谢谢

最佳答案

MKPinAnnotationView 不在图钉下方显示名称。它仅在您点击它和显示标注时显示。

如果你想要这种带有名称的圆形注释 View 样式,应该使用 MKMarkerAnnotationView。要更改其颜色,您可以设置 markerTintColor


顺便说一句,我不建议像那样直接实例化您的注释 View 。

我建议在 viewDidLoad 中注册一个重用 id:

mapView.register(MKMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

然后,在 viewFor 中,您可以像这样使可重用的注释 View 出队:

let view = mapView.dequeueReusableAnnotationView(withIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier, for: annotation) as! MKMarkerAnnotationView
view.markerTintColor = ...

当您可以开始重用注释 View 时,这会更有效率。


现在,我会更进一步,完全删除 viewFor,并将注释 View 的配置放在它所属的注释 View 类中。 (这就是我们使用 MKMapViewDefaultAnnotationViewReuseIdentifier 的原因。)

例如,我将 MKMarkerAnnotationView 子类化:

class MyAnnotationView: MKMarkerAnnotationView {
override var annotation: MKAnnotation? { didSet { update(for: annotation) } }

override init(annotation: MKAnnotation?, reuseIdentifier: String?) {
super.init(annotation: annotation, reuseIdentifier: reuseIdentifier)
update(for: annotation)
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}


private extension MyAnnotationView {
func update(for annotation: MKAnnotation?) {
guard let annotation = annotation as? MyAnnotation else { return }

markerTintColor = ...
}
}

然后在 viewDidLoad 中注册这个注解 View :

mapView.register(MyAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)

但是在这个模式中,你根本没有实现 viewFor。如果您有多个自定义注释重用标识符,您只需要这样做。

关于ios - 注释引脚颜色和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com