2017-02-04 7 views
0

私は自分のプログラムでCloudKitからいくつかの "イベント"をダウンロードします。それぞれには、画像、タイトル、および場所が含まれています。 2番目の2つはすぐに使用され、問題はありません。別のビューコントローラを使用して画像を表示している注釈の情報ボタンをクリックすると、イメージが表示されます。 ViewControllerを使用する前に画像を取得して、各イベントの画像を別々に保つのには問題があります。各レコードはCloudKitから照会上下方法に次に送信ループのために投入される。ここでSwiftでViewControllerの複数のインスタンスに画像を送信

である:ここ

func loadEvent(_ completion: @escaping (_ error:NSError?, _ records:[CKRecord]?) -> Void) 
    { 
     //...record is downloaded from cloudkit 

       for record in records 
       { 
        if let asset = record["Picture"] as? CKAsset, 
         let data = NSData(contentsOf: asset.fileURL), 
         let image1 = UIImage(data: data as Data) 
        { 
         self.drawEvents(record["LocationF"] as! CLLocation, title1: record["StringF"] as! String, pic1: image1) 
        } 
       } 
      } 

変数が割り当てられ、点注釈を作成するために使用される場合である(それここで

func drawEvents(_ loc: CLLocation, title1: String, pic1: UIImage) 
    { 
     mapView.delegate = self 
     let center = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude) 
     let lat: CLLocationDegrees = center.latitude 
     let long: CLLocationDegrees = center.longitude 
     self.pointAnnotation1 = CustomPointAnnotation() 
     self.pointAnnotation1.imageName = pic1 
     self.pointAnnotation1.title = title1 
     self.pointAnnotation1.subtitle = "Event" 
     self.pointAnnotation1.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long) 
     self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation1, reuseIdentifier: nil) 
     self.mapView.addAnnotation(self.pinAnnotationView.annotation!) 
    } 

がMKMapAnnotation上の情報ボタンがクリックされたときにEventPageが見せる機能です::画像を含むカスタム1)がある

ここ

はEventPageのためのViewControllerです:単一インスタンスのプロパティであなたの注釈を保存する

class EventPageViewController: UIViewController { 

    @IBOutlet weak var eventPic: UIImageView! 

    var photo: UIImage! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let firstViewController:FirstViewController = storyboard?.instantiateViewController(withIdentifier: "Home") as! FirstViewController 

     photo = firstViewController.pointAnnotation1.imageName 
     //photo is nil 

     eventPic.image = photo 
    } 
} 
+0

項目を1つの変数ではなく配列に保存します。 – Paulw11

+0

しかし、どのピクチャがイベントページにいつ渡されるべきかはわかります。それぞれが異なる – Steve

+0

タップされたアノテーションビューはデリゲートメソッドに渡されるので、どのアイテムであるかが分かります。アノテーションビューの 'annotation'プロパティは' CustomPointAnnotation'インスタンスです。 – Paulw11

答えて

0

Intead(あなたは最後のものだけにアクセスできることを意味する)、あなたが、配列に格納しますタップに応答するためにそれらを保存する必要はありません。

var annotations = [CustomPointAnnotation]() 

func drawEvents(_ loc: CLLocation, title1: String, pic1: UIImage) 
{ 
    mapView.delegate = self 
    let center = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude) 
    let lat: CLLocationDegrees = center.latitude 
    let long: CLLocationDegrees = center.longitude 
    var newAnnotation = CustomPointAnnotation() 
    newAnnotation = CustomPointAnnotation() 
    newAnnotation.imageName = pic1 
    newAnnotation.title = title1 
    newAnnotation.subtitle = "Event" 
    newAnnotation.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long) 
    self.mapView.addAnnotation(newAnnotation) 
    self.annotations.append(newAnnotation) 
} 

タップされたアノテーションビューは、デリゲートメソッドに渡されるため、どのアイテムであるかがわかります。注釈ビューの注釈プロパティは、CustomPointAnnotationインスタンスです。

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 

    let eventPageViewController:EventPageViewController = storyboard?.instantiateViewController(withIdentifier: "EventPage") as! EventPageViewController 

    if let annotation = view.annotation as CustomPointAnnotation { 
     eventPageViewController.photo = annotation.imageName 
    } 

    self.present(eventPageViewController, animated: true, completion: nil) 
} 
+0

1つの行**もし注釈をつけるならば=表示。注釈は! "条件付きバインディングの初期化子には、 'CustomPointAnnotation'ではなく、オプションの型が必要です。 – Steve

+0

エラーを追加する前にエラーが発生しました。 「/ MKAnnotation?」 'CustomPointAnnotation'に変換できません;あなたは 'as'を使用することを意味しましたか?ダウンキャストを強制する? @ Paulw11 – Steve

関連する問題