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

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

0回答

2340閲覧

マップに打ったピンをタップと同時にドラッグさせたい

_utah

総合スコア20

Swift

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

Swift 2

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

0グッド

0クリップ

投稿2017/02/20 12:44

編集2017/02/21 00:37

###前提・実現したいこと
マップに打ったピンをドラッグアンドドロップで移動させています。

その際に、一度ピンをタップ(選択)した後にそのピンを長押しすると、ピンが浮き上がりドラッグアンドドロップ出来るところまで実装できました。

しかし、ピンを選択→長押しでドラッグアンドドロップという方法では、一度ピンを選択しなければならないという手間がユーザに発生します。

ですので、ユーザ直感的に操作させるため、ピンのタップ(選択)とドラッグを同時に行いたいと思いコードを書いてみたのですが、思った通りの挙動にならず質問させていただきました。

実現したいことは、マップに打ったピンをタップすると同時にドラッグを開始したいです。

ご教授お願いいたします。

###発生している問題・エラーメッセージ

タップすると同時にドラッグを開始したいが、うまくいかない。

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

swift

1import UIKit 2import MapKit 3 4class AClass: UIViewController, 5 CLLocationManagerDelegate, 6 MKMapViewDelegate 7{ 8 9 @IBOutlet weak var mapView : MKMapView! // マップビュー 10 11 12 override func viewWillAppear(animated : Bool) { 13 self.mapView.delegate = self 14 } 15 16 17 //アノテーションビューを返すメソッド 18 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 19 20 //アノテーションビューを生成する。 21 let pinView = MKPinAnnotationView(annotation : annotation,reuseIdentifier : nil) 22 pinView.animatesDrop = true // ピンを上から降らせる 23 pinView.annotation = annotation // 座標、タイトル、サブタイトルを設定する 24 pinView.pinColor = .Green // ピンの色を変える 25 pinView.draggable = true // ドラッグを可能にする 26 //pinView.dragState = MKAnnotationViewDragState.Starting 27 return pinView 28 } 29 30 31 // 選択された際に入る 32 func mapView(mapView : MKMapView,didSelectAnnotationView view : MKAnnotationView){ 33 //view.setDragState(MKAnnotationViewDragState.Starting, animated: true) 34 } 35 36 //ドラッグ&ドロップ時の呼び出しメソッド 37 func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, didChangeDragState newState: MKAnnotationViewDragState, fromOldState oldState: MKAnnotationViewDragState) { 38 39 //ドラッグ開始 40 if(newState == .Starting){} 41 42 //ピンを離した場合 43 if(newState == .Ending){} 44 } 45 46 47 @IBAction func TouchedMap(sender: AnyObject) { 48 /// タップしたらピンを置く変更コード 49 let tapPoint = sender.locationInView(view) 50 51 /// タップした位置を緯度、経度の座標に変換する。 52 let center:CLLocationCoordinate2D = mapView.convertPoint(tapPoint, toCoordinateFromView : mapView) 53 54 /// ピンを作成してマップビューに追加する。 55 let annotation = MKPointAnnotation() 56 annotation.coordinate = CLLocationCoordinate2DMake(center.latitude, center.longitude) 57 annotation.title = String("ピン") 58 annotation.subtitle = "\(Double(annotation.coordinate.latitude)), \(Double(annotation.coordinate.longitude))" 59 mapView.addAnnotation(annotation) 60 } 61}

###試したこと
タップした際(選択した際)に入るfunc mapView(mapView : MKMapView,didSelectAnnotationView view : MKAnnotationView)の内部で、
ドラッグのステータスをStartingなどにしてみたり、func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?の内部で
ドラッグのステータスをStartingなどにしてみたりしたが、挙動に変化がありませんでした。

Draggingにした際は、タップしたらピンが浮くようになりましたが、移動させることができませんでした。

参考
https://developer.apple.com/reference/mapkit/mkmapviewdelegate/1452393-mapview
https://developer.apple.com/reference/mapkit/mkannotationview/1452639-setdragstate?language=objc

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問