3

カスタム MKAnnotationView サブクラスがあります。私が望むとおりにビューを表示しています。そのビューには、ボタンがあります。アクションを実行するボタンのイベントをキャプチャしたい。これはうまくいきます。

ただし、コールアウトが閉じられたり消えたりしたくありません。基本的に、吹き出しのボタンをタッチするとサウンドが再生されますが、ユーザーが必要に応じて停止を押すことができるように、注釈を表示したままにして、マップピンを再度タッチして注釈を元に戻す必要がないようにします。別の例では、ボタンのタッチで吹き出しの詳細をアニメーション化する必要があるため、その時点で吹き出しを閉じたくありません。

ユーザーが吹き出しまたは吹き出し内のボタンを選択するたびに、吹き出しが消えないようにするにはどうすればよいですか?

4

2 に答える 2

6

これは最善の解決策ではないかもしれませんが、間違いなく機能します。まず、文脈を観察するなど、色々と試してみましたが、クラッシュを乗り越えられず、面倒そうに見えました。だから、これは私がしたことです:

最初に、アラートを表示可能に保つための制御要素を指定しました。私の場合、カスタムアノテーションビューを作成しました。ユーザーがそのカスタムビューのボタンをクリックするたびに、それを表示したままにし、コンテンツを変更することもできます。そこで、そのカスタムビューにデリゲートを設定して、何かが変更されたときにマップが認識できるようにします。マップビューコントローラーで、そのメッセージをキャッチし、クラスメンバー変数をtrueに設定して、注釈ビューを残したいことを示します。

注:これは、選択メッセージが表示される前に発生します。

ここで、didDeselectAnnotationメソッドで、ブール値を確認します。表示したままにしたい場合は、注釈を削除しないことを選択し、ブール値をリセットして、アニメーションをNOに設定し、注釈を手動で再選択します。これにより、注釈ビューが「表示されたまま」になります。おそらくチートですが、ユーザーには違いがわかりません。そのブール値が選択解除に問題がないことを示している場合は常に、注釈を削除するだけですべて問題ありません。

したがって、ワークフローは次のとおりです。

  1. タッチピン
  2. CustomAnnotationViewが表示されます
  3. ユーザーがCustomAnnotationViewのボタンをクリックすると、アクションが発生したことがデリゲート(mapView)に通知されます。
  4. クラスのブール値を設定して、注釈を保持したいことを認識します
  5. 次に、mapViewはdidDeselectAnnotationメソッドを呼び出します
  6. didDeselectAnnotationメソッドで、条件付きを使用して注釈を削除するか、注釈を削除せずにアニメーションなしで手動で再選択することで注釈を保持するかを決定します。

これが他の人の役に立つことを願っています。これを理解するのに少し時間がかかりましたので、時間を節約できることを願っています。

より良い解決策を見つけたら、ぜひここに投稿してください!

于 2011-07-29T13:49:47.853 に答える
1

hittest を使用してコールアウトのクローズを抑制することができます。この次の投稿を確認してください。 吹き出しのタイトルのタップを検出する

于 2012-11-21T15:55:08.913 に答える