gpt4 book ai didi

swift mapkit 注释重复相同的 CalloutAccessoryView 图像

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

我尝试制作一个带有注释的简单 map ,但是当我尝试运行它时,detailCalloutAccessoryView 的图像是相同的,但我确定我放了两个不同的图像,这是怎么发生的?或者有没有人有更好的方法来做到这一点?

   var tripspot:[tripSpot] = [
tripSpot( title: "1", coordinate: CLLocationCoordinate2DMake(24.149062, 120.684891), location: "台中市北區一中街", type: "rare",cllocation:CLLocation(latitude: 24.181143, longitude: 120.593158),image : "025"),
tripSpot( title: "2", coordinate: CLLocationCoordinate2DMake(24.180407, 120.645086), location:"台中逢甲", type: "rare",cllocation:CLLocation(latitude: 24.180407, longitude: 120.645086),image : "007")]
// Build LocationManager
let locationManager = CLLocationManager()


override func viewDidLoad() {
super.viewDidLoad()


// set data
setupData()

}

func setupData(){
for aSpot in tripspot {
//set annotation
let coordinate = aSpot.coordinate
let title = aSpot.title
let type = aSpot.type

//set annotation
let tripSpotAnnotation = MKPointAnnotation()
tripSpotAnnotation.coordinate = coordinate
tripSpotAnnotation.title = title
tripSpotAnnotation.subtitle = type
mapView.addAnnotations([tripSpotAnnotation])



}
}
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?
{
if annotation.isKindOfClass(MKUserLocation)
{

return nil
}

var view = mapView.dequeueReusableAnnotationViewWithIdentifier("annotationIdentifier")as? MKPinAnnotationView

if view == nil
{
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "annotationIdentifier")
view?.canShowCallout = true
view?.sizeToFit()
}
else{
view!.annotation = annotation
}
for aSpot in tripspot{

// set pinview
let detailCalloutAccessoryView = UIImageView(frame: CGRectMake(0, 0, 53, 53))
detailCalloutAccessoryView.image = UIImage(named: aSpot.image!)
view?.detailCalloutAccessoryView = detailCalloutAccessoryView

view?.pinTintColor = pinColor(annotation.subtitle!!)
}
return view
}

感谢您的任何建议。

最佳答案

您不应在 viewForAnnotation 中遍历整个 tripSpot 数组。此方法适用于特定注释,但其编写方式将重复设置(和重置)每个注释的详细信息附件,使其成为 tripspot< 中每个 aSpot 的每个图像,有效地为每个注释提供与最后一个 tripspot 相同的细节附件(这样做效率低下)。

相反,使您的注释成为 MKPointAnnotation 的子类并添加一个属性,以便它知道要为给定注释使用哪个图像。如果 tripspot 是一个引用类型数组,您可能只需添加一个属性来引用相关的 tripspot 条目(然后它可以从中识别要显示的图像)。然后,viewForAnnotation 应该从您的自定义注释子类中检索该属性,而不是遍历 tripspot 数组。此外,通过包含对底层 tripspot 条目的引用,您现在还可以让“选择详细信息附件”例程知道它与哪个 tripspot 相关联,并采取适当的操作。

顺便说一句,我不知道有多少潜在的注释,但将图像名称保存在 tripspot 数组中而不是图像本身可能更为谨慎。图像相对较大,如果您有很多注释,则可能会遇到内存问题。通常更谨慎的做法是根据需要实例化您的 UIImage 对象,而不是用实际图像填充数组。

关于swift mapkit 注释重复相同的 CalloutAccessoryView 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382916/

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