0

マップ MKAnnotation CalloutAccessoryView を設定して、レルム データベースからマッピングされた選択した画像を表示するにはどうすればよいですか (左右の calloutAccessory のように、両側にアイコンとボタンがありますか?)。ここで MapViewController の他の関数のクラス/メンバーを認識するためにも必要ですか? データと左右のコールアウト アクセサリのマッピングは正常に機能していますが、選択した画像を追加する方法がわからないため、コールアウトに大きなポスター スタイルの画像として表示されます (小さなアイコンとボタンを使用)。両側に)。

画像はSpecimenAnnotation.objectPoster

SpecimenAnnotation (データをマップするために正常に動作しています) と 'objectPoster' 値は、このように私のファイル Specimen.swift に含まれているクラス Specimen から選択された (およびマップされた) 注釈です。

 class Specimen: Object{
  dynamic var name = ""
 dynamic var objectPoster = ""
 dynamic var latitude = 0.0
 dynamic var longitude = 0.0
 dynamic var created = NSDate()
 dynamic var category: Category!
}

私のMapViewControllerでは、「annotationView.detailCalloutAccessoryView = UIImageView(image: SpecimenAnnotation.objectPoster)」という行で、「インスタンスメンバー「objectPoster」はタイプ「標本注釈」では使用できませんという赤い警告エラーが表示されます

私は初心者です。ご提案をいただければ幸いです。何か案は?

このデータとエラーに関するコード ブロックは次のとおりです。

       // Create annotations for each one
    for specimen in specimens { // 3
        let coord = CLLocationCoordinate2D(latitude: specimen.latitude, longitude: specimen.longitude);

        let specimenAnnotation = SpecimenAnnotation(coordinate: coord,  poster: specimen.objectPoster, subtitle: specimen.category.name, specimen: specimen)

        mapView.addAnnotation(specimenAnnotation) // 4
    }
   }

}

 //MARK: - MKMapview Delegate
 extension MapViewController: MKMapViewDelegate {

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

    guard let subtitle = annotation.subtitle! else { return nil }

    if (annotation is SpecimenAnnotation) {
        if let annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(subtitle) {
            return annotationView
        } else {

            let currentAnnotation = annotation as! SpecimenAnnotation

            let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: subtitle)
            annotationView.image = UIImage(named:"IconStudent")
            annotationView.enabled = true
            annotationView.canShowCallout = true                      

            // ERROR message here> 
            annotationView.detailCalloutAccessoryView = UIImageView(image: SpecimenAnnotation.objectPoster)

            // right accessory view
            let infoButton = UIButton(type: UIButtonType.InfoDark)
            // Left accessory view
            let image = UIImage(named: "button50")
            let specimenButton = UIButton(type: .Custom)
            specimenButton.frame = CGRectMake(0, 0, 30, 30)
            specimenButton.setImage(image, forState: .Normal)
            annotationView.rightCalloutAccessoryView = infoButton
            annotationView.leftCalloutAccessoryView = specimenButton

            if currentAnnotation.title == "Empty" {
                annotationView.draggable = true
            }              
            return annotationView
        }
    }
    return nil

}
4

1 に答える 1

0

値を currentAnnotation にプルし、それを DetailCalloutAccessoryView の UIImageView に追加することで解決しました

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

    guard let subtitle = annotation.subtitle! else { return nil }

    if (annotation is SpecimenAnnotation) {
        if let annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(subtitle) {
            return annotationView
        } else {

            let currentAnnotation = annotation as! SpecimenAnnotation

            let currentImage = currentAnnotation.objectPoster!


            let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: subtitle)
            }

            annotationView.enabled = true
            annotationView.canShowCallout = true

            // right accessory view
            let calloutInfoButton = UIButton(type: UIButtonType.InfoDark)

            // Left accessory view
            let calloutLeftImage = UIImage(named: "button50p")
            let calloutLeftButton = UIButton(type: .Custom)
            calloutLeftButton.frame = CGRectMake(0, 0, 30, 30)
            calloutLeftButton.setImage(calloutLeftImage, forState: .Normal)

            //show Image on callout Accessory

            let url = NSURL(string: currentImage)
            let data = NSData(contentsOfURL: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check
            //annotationView.image = UIImage(data: data!)
            let calloutImage = UIImage(data:data!)

            annotationView.detailCalloutAccessoryView = UIImageView(image: calloutImage)

            annotationView.rightCalloutAccessoryView = calloutInfoButton
            annotationView.leftCalloutAccessoryView = calloutLeftButton

            if currentAnnotation.title == "Empty" {
                annotationView.draggable = true
            }
            return annotationView
        }
    }
    return nil

}
于 2016-08-25T05:55:17.643 に答える