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

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

ただいまの
回答率

90.60%

  • Swift

    7046questions

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

ドラッグでのアノテーションの移動について

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 115

tyobigorou

score 489

いつもお世話になります。
MarkerAnnotationViewをドラッグで移動させる際に、Markerが消えてしまいますが、
PinAnnotationViewのときのようにドラッグ中にCalloutを非表示にし、Markerを表示させるようにするにはどうすればいいでしょうか?

MarkerAnnotationView

PinAnnotationView

MarkerAnnotationView without Callout

MarkerAnnotationのコード↓ 

// ロングタップ開始時にタップされた座標にアノテーションを追加する
    @IBAction func mapLongPressed(_ sender: UILongPressGestureRecognizer) {
        // マップビュー内のタップした位置を取得する。
        let location: CGPoint = sender.location(in: mapView)
        // ロングタップ開始時にアノテーションを追加する
        if (sender.state == UIGestureRecognizerState.began){
            // タップした位置を緯度、経度の座標に変換する。
            let mapPoint:CLLocationCoordinate2D = mapView.convert(location, toCoordinateFrom: mapView)
            // アノテーションを追加する
            let annotation = MKPointAnnotation()
            annotation.coordinate = CLLocationCoordinate2DMake(mapPoint.latitude, mapPoint.longitude)
            annotation.title = "title"
            annotation.subtitle = "subtitle"
            mapView.addAnnotation(annotation)
        }
    }

    //アノテーションビューを返すメソッド
    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        // アノテーションビューをマップビューから取得・取得できれば再利用する
        var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: "Pin") as? MKMarkerAnnotationView

        if (pinView == nil){
            // アノテーションビューを生成する
            pinView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "Pin")
        } else {
            // アノテーションビューに座標・タイトル・サブタイトルを設定する
            pinView!.annotation = annotation
        }

        // アノテーションビューに色を設定する
        pinView.markerTintColor = UIColor.red
        // 吹き出しの表示をONにする
        pinView.canShowCallout = true
        // ドラッグ可能にする
        pinView.isDraggable = true
        // ピンのアニメーションをONにする。
        //pinView.animatesDrop = true
        // markerのアニメーションをonにする
        pinView.animatesWhenAdded = true

        //左ボタンをアノテーションビューに追加する。
        let button = UIButton()
        button.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        button.setTitle("left", for: .normal)
        button.setTitleColor(UIColor.black, for:.normal)
        button.backgroundColor = UIColor.yellow
        pinView.leftCalloutAccessoryView = button

        //右ボタンをアノテーションビューに追加する。
        let button2 = UIButton()
        button2.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        button2.setTitle("right", for: .normal)
        button2.backgroundColor = UIColor.red
        button2.setTitleColor(UIColor.white, for:.normal)
        pinView.rightCalloutAccessoryView = button2

        return pinView
    }

    //吹き出しアクササリー押下時の呼び出しメソッド
    func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
        if(control == view.leftCalloutAccessoryView) {
            print("rightButtonTapped")
        } else {
            print("leftButtonTapped")
        }
    }

Pinのコードは下記を変更しているだけです。

MKMarkerAnnotationViewMKPinAnnotationView
markerTintColor → pinTintColor
animatesWhenAdded → animatesDrop
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    swift Button タップ スワイプ

    現在、タップとスワイプの二つを一つのボタンで行おうとしています。 ボタンをタップしたらUIViewを出して ボタンをスワイプしたらそのボタンが指に沿って移動する・・・

  • 解決済

    Swift オブジェクトを配列に

    Swiftについてなのですが、 Button や Label などのオブジェクトは配列に入れることはできるのですか? というか、配列に入れて量産することができるのですか?

  • 解決済

    Swiftの座標取得ができないです...

    座礁取得をするコード(コピペなのですが) を記述してみたら Cannot call value of non-function type '((UIView?) -> CG

  • 解決済

    MKMapView内のAnnotationの色を条件によって変更したい

    前提・実現したいこと ・マップ上のピンの色を条件により変更したい ・APIから情報を取得し、複数のデータ(今回は仮に3箇所)のピンを置く ・その条件はdata[num]["c

  • 解決済

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

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

  • 解決済

    UIButtonにおけるsenderのanyとUIButtonの違いはなんですか。

    タイトルの通りなんですが、 anyとUIButtonの違いはなんでしょうか。 なんとなくanyの方が自由度が高いのはわかりますが、 どういった場合にそのanyが効いて

  • 解決済

    【Swift】Viewの座標位置の変換がうまくいかない。

    前提・実現したいこと UIViewに枠線をつけ画面中央に配置しており、その中に収まっている部分のUIImagewのimageを取得したいのです。 Viewに収まっている部分をc

  • 解決済

    Swift3でMapViewのPinを縮小した写真にしたい

    MapViewを使い、現在地で撮った写真をPinの画像にするフォトアルバムを作ろうとしています。 pickerViewで写真を撮った後に画像の配列に写真を入れて、それをPinの画

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

  • Swift

    7046questions

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