カスタムMkannotationView-タッチをキャプチャし、コールアウトを却下しない方法は?
-
25-10-2019 - |
質問
カスタムmkannotationViewサブクラスがあります。それは私が望むように正確に眺めを示しています。そのビューには、ボタンがあります。ボタンのイベントをキャプチャしてアクションを実行したいと思います。これはうまく機能します。
しかし、私はコールアウトを却下したり消えたりすることを望んでいません。基本的に、コールアウトのボタンに触れるとサウンドが再生されますが、アノテーションを再度戻すために再度マップピンに触れることなく、ユーザーが必要に応じて停止を押すことができるように、注釈を残しておきたいです。別の例では、コールアウトの詳細をアニメーション化するためにボタンタッチが必要なので、その時点でコールアウトを却下したくありません。
ユーザーがコールアウトまたはコールアウト内のボタンを選択するたびに、コールアウトが消えないようにするにはどうすればよいですか?
解決
これは最良の解決策ではないかもしれませんが、間違いなく機能します。最初に、私はコンテキストなどを観察するなど、多くのことを試しましたが、私は過去のクラッシュを得ることができず、面倒に思えました。だから、これは私がしたことです:
最初に、アラートを表示可能に保つための制御要因が何であるかを指定しました。私の場合、カスタムアノテーションビューを作成しました。ユーザーがそのカスタムビューのボタンをクリックするたびに、目に見えるようにし、コンテンツを変更することもできます。そこで、私のマップがいつ何かが変わるかを知ることができるように、そのカスタムビューに代表者を設定します。マップビューコントローラーでは、そのメッセージをキャッチし、クラスメンバー変数をtrueに設定して、アノテーションビューを維持したいことを意味します。
注:これ 以前に起こります 選択メッセージが発生します。
さて、私のdideselectannotation方法では、ブール値をチェックします。目に見えるようにしたい場合は、注釈を削除しないことを選択し、ブール値をリセットし、 注釈を再選択します 手動で、アニメーションをnoに設定します。これにより、注釈は「留まる」という見方を見ることができます - おそらくチートがありますが、ユーザーは違いを見ることができません。そのブール値が解決策が大丈夫であると言うたびに、私は単に注釈を削除するだけで、すべてが順調です。
だから、ワークフローはこれです:
- タッチピン
- CustomAnnotationViewが表示されます
- ユーザーはCustomAnnotationViewのボタンをクリックします。これにより、アクションが発生したことをデリゲート(MapView)に通知します
- クラスのブール値を設定して、注釈を維持したいことを知る
- MapViewは、DidDesElectAnnotationメソッドを呼び出します
- diddeselectAnnotationメソッドでは、条件付きで使用して、注釈を削除するか、アノテーションを削除せず、アニメーションなしで手動で再選択することでそれを維持する必要があるかどうかを決定します。
これが他の人に役立つことを願っています。これを理解するのに少し時間がかかったので、時間を節約することを願っています。
より良い解決策を見つけた場合は、どうしてもここに投稿してください!
他のヒント
Hittestを使用してCalloutの閉鎖を抑制することができます。次の投稿を確認してください。Calloutのタイトルをタップします