質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

受付中

地図上のピンの画像を、外部ストレージに格納している個別の画像に変更したい

watasuke
watasuke

総合スコア27

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0回答

0リアクション

1クリップ

128閲覧

投稿2017/07/01 03:04

###前提・実現したいこと
地図的なアプリを作っているのですが、ピンの画像を、FirebaseStorageに格納している個別の画像に変更したいです。

コードの前半部分は関係ないと思いますが、初心者でどこまでお見せすればよいかわからないため全体を公開します。

###発生している問題・エラーメッセージ
ピンの画像がデフォルトのまま変わりません。
画像の取得自体はうまくいっているようで、print(imageimage!)では格納している画像についての情報を読めるのですが、実際のピンはデフォルトのままです。

また、ビルドエラーで一番下の}で

Missing return in a function expected to return 'MKAnnotationView!'

とエラーメッセージが出てきます。
returnはしているつもりなのですが、どこか間違っているのでしょうか?

###該当のソースコード

swift3

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if annotation === mapView.userLocation { // 現在地を示すアノテーションの場合はデフォルトのまま return nil } else { //配列の該当のデータをitemという定数に代入? let items = contentArray //画像を取ってくる、まずはFirebaseStorageに接続 let storage = Storage.storage() // Create a storage reference from our storage service let storageRef = storage.reference(forURL: "https://firebasestorage.googleapis.com/v0/b/catmap-44f0a.appspot.com/o/") for item in items { //itemの中身を辞書型に変換? let content = item.value as! Dictionary <String, Any> for (key, element) in content{ let pinData = content[key] as! [String: Any] if let geohash = pinData["geohash"] as? String { let (latitude, longitude) = Geohash.decode(hash: geohash)! let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake(CLLocationDegrees(latitude.min), CLLocationDegrees(longitude.min)) annotationArray.append(annotation) let reuseId = "pin" if let pinView = self.mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) { return pinView } else { // 再利用できるアノテーションが無い場合(初回など)は生成する let pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) // Firebase Storageの該当imageのReference let catRef = storageRef.child("images/\(key)/0.jpg") // Fetch the download URL catRef.downloadURL { (URL, error) -> Void in if (error != nil) { // Handle any errors } else { // Get the download URL for 'images/stars.jpg' // URLを指定したUIImageの生成例 let PictureURL = URL! /* デフォルト設定でセッションオブジェクトを作成する。 */ let session = URLSession(configuration: .default) /* ダウンロードタスクを定義します。ダウンロードタスクは、 URLの内容をデータオブジェクトとしてダウンロードし、 そのデータで望むことを実行できます。 */ let downloadPicTask = session.dataTask(with: catPictureURL) { (data, response, error) in /* ダウンロードが完了しました。 */ if let e = error { print("cat pictureのダウンロード中にエラーが発生しました: \(e)") } else { /* エラーは見つかりませんでした。 レスポンスがないと変わってしまいますので、それもチェックしてください。 */ if let res = response as? HTTPURLResponse { print("\(res.statusCode)") if let imageData = data { /* 最後に、そのデータをイメージに変換し、 それを使って望むことをします。 */ let imageimage = UIImage(data: imageData) print(imageimage!) pinView.image = imageimage pinView.annotation = annotation } else { print("画像を取得できませんでした:画像はありません") } } else { print("何らかの理由で応答コードを取得できませんでした") } } } downloadPicTask.resume() } } return pinView } self.mapView.addAnnotations(annotationArray) } } } } }

###補足情報(言語/FW/ツール等のバージョンなど)
swift3
xcode8.3.3

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています