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

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

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

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

Swift 2

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

Q&A

解決済

1回答

2993閲覧

アノテーションの吹き出しがずれる。

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/10/12 02:08

###前提・実現したいこと
MKMapViewを利用し、緯度経度を元にアノテーションを作成、
そのアノテーションをタップすると吹き出しを表示するようにしています。
また、ピンのカラーを緑に変更しています。

この吹き出しをずれないようにしたいのです。

###発生している問題・エラーメッセージ
画像のように吹き出しが正しい位置より右にずれてしまいます。
スクショ

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

Swift

1import UIKit 2import MapKit 3 4class ViewController: UIViewController, MKMapViewDelegate { 5 6 @IBOutlet weak var mapView: MKMapView! 7 8 let latitudeArray: [Double] = [0,10,20,30,40,50] 9 let longitudeArray: [Double] = [0,10,20,30,40,50] 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 for cnt in 0...a.count - 1 { 15 let latitude = latitudeArray[cnt] 16 let longitude = longitudeArray[cnt] 17 18 let annotation = MapAnnotationSetting() 19 annotation.coordinate = CLLocationCoordinate2DMake(latitude, longitude) 20 annotation.title = "title" 21 self.mapView.addAnnotation(annotation) 22 23 } 24 self.mapView.showAnnotations(self.mapView.annotations, animated: true) 25 26 } 27 28 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 29 30 let pinView = MKPinAnnotationView() 31 pinView.annotation = annotation 32 pinView.pinColor = MKPinAnnotationColor.Green 33 pinView.canShowCallout = true 34 return pinView 35 36 } 37 38 func mapView(mapView: MKMapView, didSelectAnnotationView annotationView: MKAnnotationView) { 39 40 mapView.setCenterCoordinate(annotationView.annotation!.coordinate, animated:true) 41 let span = MKCoordinateSpanMake(0.01, 0.01) 42 let region = MKCoordinateRegionMake(annotationView.annotation!.coordinate, span) 43 mapView.setRegion(region, animated:true) 44 45 } 46 47}

###試したこと
delegateを外したり各部分をコメントアウトで実行していくにつれ
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {}
この部分をコメントアウトするとずれないことまで確認できたのですが、それ以降がさっぱりです。
システム的なものと言われたらそれまでですが、何か原因はわかりますでしょうか。

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

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

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

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

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

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

guest

回答1

0

自己解決

Swift

1func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 2 3 var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier("ShopPin") as? MKPinAnnotationView 4 if pinView != nil { 5 pinView!.annotation = annotation 6 } else { 7 pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "ShopPin") 8 } 9 if let pin = annotation as? MapAnnotationSetting { 10 if #available(iOS 9.0, *) { 11 pinView!.pinTintColor = pin.pinColor 12 } else { 13 pinView!.pinColor = MKPinAnnotationColor.Green 14 } 15 } 16 pinView!.canShowCallout = true 17 return pinView 18}

自己解決しました。
AnnotationViewIdentifierを設定し、再利用するようにしてあげると正しい位置に表示されました。

投稿2016/10/12 02:50

Y_M

総合スコア265

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問