gpt4 book ai didi

ios - 将对象解析为 AnnonationPoints

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

我试图在 MKMapView 中将一组解析对象显示为 Annonations。这似乎可行,问题是交换了对象图像,这是随机的吗?我已经开始创建 MKPointAnnotation 的子类以保存图像。图片怎么调换了?

自定义 MKPointAnnonation 类

类 AnnonationClass:MKPointAnnotation {

var itemId: NSString?
var itemImage: PFFile?
var itemdescription: NSString?

获取解析对象并使用 setGeoPoint 方法添加它们

override func objectsDidLoad(error: NSError!) {
super.objectsDidLoad(error)
if error == nil {

self.pointMapView?.removeAnnotations(pointMapView?.annotations)

for object in objects {

var theObject = object as PFObject

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd" // superset of OP's format
let str = dateFormatter.stringFromDate(object.createdAt)


self.setGeoPoint(theObject.objectForKey("location") as PFGeoPoint, titleString: theObject.objectForKey("title") as NSString, imageFile: theObject.objectForKey("image") as PFFile, theId: theObject.objectId as NSString, descString: theObject.objectForKey("description") as NSString, dateString: str)

}



}
}

在itemImage中设置坐标、标题并保存imageFile

func setGeoPoint(geoPoint:PFGeoPoint, titleString:NSString, imageFile:PFFile, theId:NSString, descString:NSString, dateString:NSString) {

var coordinate = CLLocationCoordinate2DMake(geoPoint.latitude, geoPoint.longitude) as CLLocationCoordinate2D
var pinView:AnnonationClass = AnnonationClass()


pinView.itemImage = imageFile
pinView.setCoordinate(coordinate)
pinView.title = titleString
pinView.subtitle = dateString

self.pointMapView!.addAnnotation(pinView)








}

创建图像并设置它

func mapView(mapView: MKMapView!, viewForAnnotation annotation: AnnonationClass!) -> MKAnnotationView! {



let reuseId = "pin"

var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
pinView!.pinColor = .Purple



var leftImage: PFImageView = PFImageView(frame: CGRectMake(0, 0, 44, 44))
leftImage.file = annotation.itemImage
leftImage.loadInBackground()
pinView!.leftCalloutAccessoryView = leftImage

}
else {
pinView!.annotation = annotation
}

return pinView
}

最佳答案

在您的 viewForAnnotation 中,当 pinView != nil 时,即重复使用 View 时,很可能是从上次使用该 View 时设置的图像。我认为这类似于在表格 View 单元格上设置复选标记,而不是使用数据源来正确设置单元格内容的属性。

无论 pinView 是否被重用,都尝试设置 ImageView 。

func mapView(mapView: MKMapView!, viewForAnnotation annotation: AnnonationClass!) -> MKAnnotationView! {



let reuseId = "pin"

var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.canShowCallout = true
pinView!.animatesDrop = true
pinView!.pinColor = .Purple

}
else {
pinView!.annotation = annotation
}

var leftImage: PFImageView = PFImageView(frame: CGRectMake(0, 0, 44, 44))
leftImage.file = annotation.itemImage
leftImage.loadInBackground()
pinView!.leftCalloutAccessoryView = leftImage

return pinView

关于ios - 将对象解析为 AnnonationPoints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207086/

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