2013-12-22 34 views
5

我在我的應用中實現了地圖功能,允許用戶通過平移來設置其當前位置。在平移時跟蹤MKMapView中心座標

所有這一次,我想在centerCoordinate有一個MKAnnotation。所以我想要做的就是跟蹤地圖的centerCoordinate何時發生變化並正確更改註釋的座標。該行爲將類似於優步,Hailo等。

我試過了一個基於時間的實現,其中每個0.00001scenterCoordinate將被檢查並且註釋也將被移動。但是,如果地圖不輕輕地滑動,則註釋會從一個地方跳到另一個地方,這不會構成一個好的用戶界面。

我試過的另一個實現是通過手勢識別器和MKMapViewregionDidChange/regionWillChange)的代理方法。這也是一次非常突然的過渡。

任何人都可以請告訴我如何更好地做到這一點?

回答

24

我建議根本不要使用實際的id<MKAnnotation>(至少對於這個「當前位置設置」模式)。

相反:

  1. 前方的地圖視圖的添加含有銷(或任何你喜歡的圖標)的圖像的視圖(例如UIImageView)。
  2. 該針腳視圖應爲不是是地圖視圖的子視圖。
  3. 針視圖應該是地圖視圖是子視圖的同一視圖的子視圖(例如,兩個視圖都應該是同一個超視圖的子視圖)。
  4. 針視圖的大小和位置應該位於地圖視圖中心的上方(您可以使針視圖具有與地圖視圖相同的框架和相同的自動佈局/自動存儲邏輯,以便它們保持視覺上的同步屏幕尺寸或方向)。
  5. 如果使用UIImageView,請將其內容模式設置爲「中心」,並將背景色設置爲「清除」。
  6. 銷釘視圖應該有禁用用戶互動,以便用戶仍然可以與其後面的地圖視圖交互。當用戶平移或縮放地圖視圖時,前面的視圖會立即移動。
  7. 如有必要,應用程序可以從mapView.centerCoordinateregionDidChangeAnimated:委託方法(或平移/捏手勢識別器)中獲取位置座標,或者僅在用戶說他們已完成定位時才能獲取位置座標。我不建議使用定時器(特別是每個0.00001s)來查詢當前的中心座標。
  8. 當用戶指出當前位置是他們想要最終放置註釋的位置時,您可以在該座標處創建並添加實際註釋並隱藏「位置設置模式」針視圖。
+0

哈哈,夠公平的。我也考慮過這一點,但我想我太固執了,想通過MKAnnotation操作來實現它。感謝給我我需要的微調。節日快樂! –

+0

這工作得很好。 – quantumpotato