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

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

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

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

3492閲覧

アノテーションタップ時にピン画像を変更する

Y_M

総合スコア265

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/11/08 05:49

編集2016/11/08 06:10

###前提・実現したいこと
アノテーションのタップ時にピンの画像を変更することは出来るのでしょうか。
viewForAnnotationで画像を変更する方法は実装済みで、
更にここから選択時に画像を変更したいという質問になります。

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

Swift

1func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) { 2 view.image = UIImage(named: "sample") 3 }

###試したこと
didSelectAnnotationViewのメソッドは定義済みですが、タップしてもなんの反応もしません。
イメージとしては某赤いアイコンのグルメサイトのアプリです。

###補足情報(言語/FW/ツール等のバージョンなど)
Xcode7.3.1
Swift2.2

###全文公開

Swift

1class ViewController2: UIViewController, MKMapViewDelegate { 2 3 @IBOutlet weak var mapView: MKMapView! 4 5 var data: [[String:AnyObject?]] = [] 6 7 override func viewWillAppear(animated: Bool) { 8 super.viewWillAppear(animated) 9 self.navigationItem.title = "概要" 10 } 11 12 override func viewDidAppear(animated: Bool) { 13 super.viewDidAppear(animated) 14 alamoNetwork() 15 } 16 17 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 18 19 let customAnnotation = annotation as? MapAnnotationSetting 20 21 let identifier = "annotation" 22 if let annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("annotation") { 23 return annotationView 24 } else { 25 if customAnnotation?.pinImage != nil { 26 let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier) 27 annotationView.annotation = annotation 28 annotationView.canShowCallout = true 29 annotationView.image = UIImage(named: (customAnnotation?.pinImage)!) 30 31 return annotationView 32 } else { 33 return nil 34 } 35 } 36 } 37 38 func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) { 39 view.image = UIImage(named: "sample") 40 } 41 42 func dropPin() { 43 if self.data.count > 0 { 44 for i in 0..<data.count { 45 let latitude = self.data[i]["latitude"] as? Double 46 let longitude = self.data[i]["longitude"] as? Double 47 48 let annotation = MapAnnotationSetting() 49 annotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!) 50 annotation.pinImage = "map_01" 51 52 mapView.addAnnotation(annotation) 53 } 54 mapView.showAnnotations(mapView.annotations, animated: true) 55 } 56 } 57 58 func alamoNetwork() { 59 ※省略※ 60 }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

Swift

1func dropPin() { 2 if self.data.count > 0 { 3 for i in 0..<data.count { 4 let latitude = self.data[i]["latitude"] as? Double 5 let longitude = self.data[i]["longitude"] as? Double 6 7 let annotation = MapAnnotationSetting() 8 annotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!) 9 annotation.title = "aaa" 10 annotation.pinImage = "map_01" 11 12 mapView.addAnnotation(annotation) 13 } 14 mapView.showAnnotations(mapView.annotations, animated: true) 15 } 16 }

ピンを生成する際にtitleを指定してあげると変更されました。
また今回は吹き出しを表示したくなかったため
annotationView.canShowCalloutfalseにすることで表示しないようにしました。

投稿2016/11/08 06:44

Y_M

総合スコア265

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ViewControllerで、MKMapViewDelegateを批准してますか?
されている前提で、{マップビューインスタンス}.delegate = self の一文も必要です。

投稿2016/11/08 06:03

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y_M

2016/11/08 06:05

いつもお世話になっております。 早速のご回答ありがとうございます。 どちらの処理も実装済みになっております。
fromageblanc

2016/11/08 06:07

didSelectAnnotationView、コールはされてますか?
Y_M

2016/11/08 06:13 編集

コールされていないですね。 ピンを画像に変えているのは関係ありますかね? ※全文を公開しました。 ※delegateの設定はstoryboard上で行っております。
fromageblanc

2016/11/08 06:14

MKMapViewDelegateの定義を開いてプロトの確認をしてみては。 定義への飛ばし方ははご存知ですよね。
Y_M

2016/11/08 06:17

むむ、飛べはします。 しかしどういうことでしょうか。。
fromageblanc

2016/11/08 06:28

シグニチャが微妙に違ってんのかなと思ったんです。さっきみたら問題なかったです。 ちょっと気になるのが、let customAnnotation = annotation as? MapAnnotationSetting のとこなんですが、 as? を as! に変えて実行してみてもらえませんか?
Y_M

2016/11/08 06:33

let customAnnotation = annotation as! MapAnnotationSetting 上記で実行しましたが変わった点はありませんでした。
fromageblanc

2016/11/08 06:44

確認どうもです。 他のデリゲートは呼ばれてるのですよね? しかし、didSelectAnnotationViewは呼ばれないという状況でOKですよね? タップイベントを許可してないとかかなぁ。。
Y_M

2016/11/08 06:50

一応解決されました。 こんなことで良いのか不安ですが。
fromageblanc

2016/11/08 06:52

とりあえずよかったです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問