###前提・実現したいこと
マップに打ったピンをドラッグアンドドロップで移動させています。
その際に、一度ピンをタップ(選択)した後にそのピンを長押しすると、ピンが浮き上がりドラッグアンドドロップ出来るところまで実装できました。
しかし、ピンを選択→長押しでドラッグアンドドロップという方法では、一度ピンを選択しなければならないという手間がユーザに発生します。
ですので、ユーザ直感的に操作させるため、ピンのタップ(選択)とドラッグを同時に行いたいと思いコードを書いてみたのですが、思った通りの挙動にならず質問させていただきました。
実現したいことは、マップに打ったピンをタップすると同時にドラッグを開始したいです。
ご教授お願いいたします。
###発生している問題・エラーメッセージ
タップすると同時にドラッグを開始したいが、うまくいかない。
###該当のソースコード
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
あなたの回答
tips
プレビュー