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


関連記事

SwiftGenを使ってみた

1 はじめに2 SwiftGenの特徴2.1 コードジェネレートするリソースを選択することができる2.2 コードジェネレートするのにビルドが必要ない2.3 設定ファイルベースである3 インストール4 ...

[Swift]アプリのフォアグラウンドに特定の処理を行う。

1 はじめに2 今回の目標3 画面構成4 通知の設定4.1 通知の送信4.2 通知の受信と削除-BaseController5 それぞれの画面の設定5.1 初期画面(FirstViewControll ...

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

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

no image

iOSでFirebase Authenticationを実装してみる その2

1 はじめに2 匿名アカウントから永久アカウントに変換3 サインアウト4 アカウントの削除5 パスワードの再設定メール配信6 さいごに7 おすすめ書籍 はじめに こんにちは、Yossyです。 前回は、 ...

Apple製のフレームワークCombineを触ってみた

1 はじめに2 Combineとは3 Publishers3.1 Future4 Subscribers4.1 sink4.2 assign5 Operators5.1 Prepend5.2 Appe ...

フォロー

blog-page_side_responsive

2017年5月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

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