iOS

Swift3でMapKitの吹き出し(Callout)タップを取得したい!

投稿日:2017年5月10日 更新日:

はじめに

こんにちは、nukkyです。

今回、iOSのMapKitでGoogleMapのように
吹き出しのタップを取得しようと思ったのですが、
これが案外簡単にいかなかったというか無理矢理やりました。(笑)

MapKitでの吹き出しタップ

MKMapViewDelegateに以下のメソッドが用意されています

ただ、こいつは基本的にMKAnnotationViewの
「leftCalloutAccessoryView」か「rightCalloutAccessoryView」にUIButton等のUIControlが取得できるものを配置し、
そして、そのボタンを押すなどした時に、このメソッドが呼ばれます。
しかし、今回やりたいことはGoogleMapみたいに吹き出しのどこでもタップできるようにしたいという事。
(というか吹き出しにボタンを配置したくない。。。)

吹き出しのみタップしたい!

というわけで結論を早々に述べるとMKAnnotationViewに直接UITapGestureRecognizerを設定します。

MapKitはピンを刺すときにMKAnnotationViewを使用していますがピン部分だけではなく
吹き出し(Callout)部分もSubViewではなくピンと一緒にMKAnnotationViewとして扱われています。
なので以下のようにすると吹き出し部分のタップも取得できます。

これで吹き出し部分のタップが取得できます!

ですが、このままだとピン画像(MKAnnotationView.image)の部分もタップできてしまうので、
タップ処理側で以下のような条件を付けます。

なぜこれでいけるかというと、MKAnnotationView自体のフレームはピン画像部分のみで
吹き出し部分はMKAnnotationViewのフレーム外に描画されていますので
タップしたxとyの位置がフレーム内であればそこがピン画像になります。

さいごに

以上、だいぶ無理矢理タップ判定しましたが
これでGoogleMapと同じく吹き出しのどこをタップされても取得することができます!
もし同じことで悩んでる方がいたら参考にしていただければと思います。
(もっとスマートなやり方ご存知の方、ご教授いただけると幸いです。。。)

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

MapKitをSwiftUIで使ってみた

1 はじめに2 地図の表示2.1 クリッピング表示3 地図にアノテーションを表示する3.1 マーカーの配置3.2 ピンの表示3.3 アノテーションのカスタマイズ4 さいごに5 おすすめ書籍 はじめに ...

swift

[Swift3] Segmentを使った画面切り替え (Extra View)

1 はじめに1.1 前提条件2 Segmentの用意3 表示したいViewを用意4 Extra Viewsに追加5 Segmentでの切り替え5.1 デフォルトで表示されるViewを設定5.2 Seg ...

swift

Swiftの「UIActivityViewController」でTwitterにだけハッシュタグをつけたい!

1 はじめに2 実装2.1 まずはやってみよう2.2 Twitter連携時のみにハッシュタグをつけたい3 さいごに はじめに こんにちわ、nukkyです。 今回はSNSやメール連携したいときに便利な ...

【Swift】iOS13.1、Xcode11でSceneDelegate周りを触ってみた。

1 はじめに2 SceneDelegateについて3 SceneDelegateの呼ばれる順番3.1 アプリ起動時3.2 アプリバックグラウンド3.3 アプリフォアグラウンド3.4 アプリフォアグラウ ...

【Swift】MemoryLeakの簡単な確認方法

1 はじめに2 テストの準備3 開発中のテスト4 テストコードの作成5 さいごに6 おすすめ書籍 はじめに こんにちは、suzukiです。前回の記事で循環参照について触れました。今回は問題の発見に役立 ...

フォロー

blog-page_side_responsive

2017年5月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。