2014-10-05 78 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