iphone - 自定義MKAnnotationView-如何捕捉觸摸,而不是解僱標註?




ios sdk (2)

我有一個自定義的MKAnnotationView子類。 它正如我所希望的那樣展示了這個觀點。 在這個觀點上,我有一個按鈕。 我想捕獲按鈕上的事件來執行一個操作。 這工作得很好。

但是,我不希望標註被解散或消失。 基本上,觸摸標註中的按鈕將開始播放聲音,但是我希望將註釋留給用戶,以便用戶可以在需要時按下停止按鈕,而不必再次觸摸貼圖引腳以重新標註註釋。 在另一個例子中,我希望按鈕觸摸動畫中的更多細節,所以我絕對不想在這個時候解除標註。

每當用戶選擇標註內的標註或按鈕時,如何讓標註消失?


這可能不是最好的解決方案,但它絕對有效。 首先,我嘗試了一些東西,比如觀察上下文等等,但是我從來沒有碰到過,而且看起來很麻煩。 所以,這就是我所做的:

我首先指定了保持警報可見的控制因素。 在我的情況下,我創建了一個自定義註釋視圖,每當用戶單擊該自定義視圖上的一個按鈕,我希望它保持可見,甚至可能更改內容。 所以,我在該自定義視圖上設置了一個委託,這樣我的地圖就可以知道什麼時候發生了變化。 在我的地圖視圖控制器中,我捕獲了該消息,並將類成員變量設置為true,以表示我希望註釋視圖保留。

注意:這會在選擇消息發生之前發生。

現在,在我的didDeselectAnnotation方法中,我檢查布爾值。 如果我想保持它可見,我選擇不刪除我的註釋,我重置布爾值,我手動重新選擇註釋 ,設置動畫到NO。 這可以使註釋視圖“保持”可見 - 可能是一個騙子,但用戶無法看到差異。 每當布爾值說取消選擇是好的,我只是刪除註釋,一切都很好。

所以,工作流程是這樣的:

  1. 觸摸引腳
  2. 顯示CustomAnnotationView
  3. 用戶單擊CustomAnnotationView上的一個按鈕,該按鈕通知代理(mapView)發生操作
  4. 設置類的布爾值來知道你想保留註釋
  5. 然後mapView調用didDeselectAnnotation方法
  6. 在didDeselectAnnotation方法中,使用條件決定是否應該移除註釋,或者通過不移除註釋並在沒有動畫的情況下手動重新選擇註釋來保留註釋。

我希望這可以幫助別人。 我花了一段時間才弄明白這一點,所以我希望它能節省你的時間。

如果您找到更好的解決方案,請務必在此發布!






callouts