2014-10-05 75 views
0

我试图在MKMapView中显示一组解析对象作为Annonations。这似乎工作,问题是对象图像交换,这是一种随机?我已经开始创建MKPointAnnotation的子类来保存图像。图像如何交换?将对象解析为AnnonationPoints

定制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) 

     } 



    } 
} 

设置坐标添加它们,标题并将图像文件保存在i中temImage

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 
} 

回答

2

在你viewForAnnotation,当pinView!=零,即重用视图时,它很可能是该图像是从以前的时间设置那个看法被使用了。我认为它类似于在表格视图单元格上设置复选标记,而不是使用数据源来正确设置单元格内容的属性。

尝试设置图像视图是否重新使用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 

} 
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 

}

+0

ü可以做一个例子 – 2014-10-05 21:47:51

+0

我刚搬到你的if语句之外的原始图像的代码。希望这可以帮助。 – Magnas 2014-10-06 06:10:09