地図上のピンをドラッグ&ドロップで移動して直線を引く。地図上のピンをドラッグ&ドロップで移動して直線を引く。2020年6月16日ピンの移動とは前回の記事でMKMapView(以下、マップビュー)の地図に刺したピンの色や画像を変更する方法を説明した。⇒「記事」ピンが刺さっているのを見ると、ピンを抜いて別の場所に刺し直したくなる。ピンを抜き差しできれば、ピンの位置が目的地から若干ずれているときの修正が素早く行える。そこで、本記事ではピンをドラッグ&ドロップで別の場所に移動して表示を更新する方法について説明する。以降の手順は前回記事の続きなので、実装を試してみる人は先に読んでおくことをお勧めする。ピンの移動を実装するViewController.swiftを以下のように修正する。地図に刺したピンは2つ。ドラッグ&ドロップで移動したあとに吹き出しのサブタイトルを最新の座標に更新している。ピンをドラッグ可能にするには「アノテーションビューを返すメソッド」でアノテーションビューのdraggableプロパティをtrueに変える。ドラッグ開始や終了のタイミングで「ドラッグ&ドロップ時のの呼び出しメソッド」がアプリから呼び出されるので、ドラッグステータスが「ドラッグ終了」のときに吹き出しのサブタイトルを更新している。//中心座標と表示範囲をマップに登録する。//デリゲート先に自分を設定する。//吹き出しを表示可能にする。//ドラッグ可能にする。//ピンの色を設定する。//ピンのサブタイトルを最新の座標にする。1.0)//中心座標と表示範囲をマップに登録する。UIColor.greenColor()//デリゲート先に自分を設定する。nil)//吹き出しを表示可能にする。true//ドラッグ可能にする。true//ピンの色を設定する。{//ピンのサブタイトルを最新の座標にする。\(Double(test.coordinate.longitude))"}}}}以下は実際のプレイ動画ドラッグのステータスには、以下の5種類がある。「ドラッグ&ドロップ時の呼び出しメソッド」の中で、引数に渡ってきたMKAnnotationViewインスタンスのannotation.subtitleにそのまま値を設定しようとしてもエラーが発生する。property理由は、annotationの型がMKAnnotationプロトコルのためである。これでは値の参照しかできないので、自作クラスのTestMKPointAnnotationにキャストしてからサブタイトルを変更する。色は変更しないのでMKPointAnnotationにキャストでも良い。}}ピンとピンの間に直線を引くサブタイトルの更新だけだと物足りないので、ピンを移動したあとにピンとピンの間に直線が引かれるようにしてみよう。ViewController.swiftを以下のコードに変更する。「ドラッグ&ドロップ時の呼び出しメソッド」で、前回の描画の削除と、2つのピンの座標をもとに新たな描画メソッドを実行している。「描画メソッド実行時の呼び出しメソッド」がデリゲートとして呼び出されるので、直線の色、太さを設定したMKOverlayRendererインスタンスを返している。//中心座標と表示範囲をマップに登録する。//デリゲート先に自分を設定する。//吹き出しを表示可能にする。//ドラッグ可能にする。//ピンの色を設定する。//ピンのサブタイトルを最新の座標にする。//前回の描画を削除する。//2点間に直線を描画する。//直線の幅を設定する。//直線の色を設定する。1.0)//中心座標と表示範囲をマップに登録する。UIColor.greenColor()//デリゲート先に自分を設定する。nil)//吹き出しを表示可能にする。true//ドラッグ可能にする。true//ピンの色を設定する。{//ピンのサブタイトルを最新の座標にする。\(Double(test.coordinate.longitude))"}//前回の描画を削除する。annotation2.coordinate.longitude)]//2点間に直線を描画する。overlay)//直線の幅を設定する。3//直線の色を設定する。【Swift】MKMapViewDelegateの使い方。ピンの色や画像を変更する。目印として地図にピンを刺す。...【Swift】MKOverlayの使い方。地図に円や多角形を描く。...【Swift】CLLocationManagerの使い方。...【Swift】MKLocalSearchの使い方。店名やキーワードで検索してピンを刺す。コメントをキャンセルメールアドレスが公開されることはありません。