0

地図にはたくさんの注釈があり、それらにはすべてカスタム写真があります。一部の写真はまだ Firebase からアプリケーションにダウンロードされていない可能性があるため、画像が利用できない場合は、デフォルトで白い円の画像になり、ダウンロードが開始されます。ダウンロードが完了しても、新しいイメージは設定されません。これについてどうすればよいですか?

いくつかのコードを次に示します。

func generateAnnotations() {
    for photo in photos {
        let annotation = DetailPhotoPointAnnotation()
        let latitude = photo.latitude
        let longitude = photo.longitude
        annotation.coordinate.latitude = latitude
        annotation.coordinate.longitude = longitude
        if photo.image != nil {
            annotation.image = photo.image
        } else {
            annotation.image = #imageLiteral(resourceName: "whiteCircle")
            let path = getDocumentsDirectory().appendingPathComponent(photo.uid)
            if let image = UIImage(contentsOfFile: path) {
                annotation.image = image
            } else {
                let ref = FIRStorage.storage().reference(forURL: photo.imageUrl)
                ref.data(withMaxSize: 5*1024*1024, completion: { (data, error) in
                    if error != nil {
                        print(error!)
                    } else {
                        if let imageData = data {
                            if let image = UIImage(data: imageData) {
                                photo.assignImage(image: image)
                                annotation.image = image
                            }
                        }
                    }
                })
            }
        }
        self.coordinates.append(CLLocationCoordinate2DMake(latitude, longitude))
        self.mapView.addAnnotation(annotation)
    }
    generateOverlay()
}

ご覧のとおり、最初に写真オブジェクトに画像が含まれているかどうかを調べます。そうでない場合は、ドキュメント ディレクトリでその画像を探します。そこにない場合は、最終的にダウンロードします。助言がありますか?

4

1 に答える 1