2015-01-16 74 views
2

我有一個問題,我無法解決一段時間。Google Maps SDK iOS - 防止地圖在變焦位置發生變化

我有一個GMSMapView,它前面的imageView位於中央。結果 - 我可以拖動地圖,並始終擁有居中的引腳。但是當我縮放地圖時會出現問題。 縮放 - 地圖目標更改的位置以及我的imageView指向其他位置。

我可以檢測是否縮放變化,但我實際上不能強制GMSMapView只做縮放而沒有任何位置變化。

-(void) mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position 
{ 
    if (mZoomLevel != mapView.camera.zoom) 
    { 
     mZoomLevel = mapView.camera.zoom; 
    } 
} 

所以基本上,我想要一直居中pin,即使我執行縮放。 我試過GMSMarker,但在跟蹤地圖中心時,它的性能有問題。它不會立即執行,所以我決定使用imageView。

主要問題:如何在執行縮放時鎖定當前位置的地圖?

+0

好了,我想通了,我居然可以強制地圖鎖定和停止滾動。 GMSUISettings地圖屬性有一個'scrollGestures'和'zoomGestures'標誌可能有幫助。但是我遇到了另一個問題。我必須返回到GMSMarker而不是imageView,因爲imageView仍然會改變縮放位置(實際上是bg中的地圖)。我可以切換標記和imageView,但看起來很糟糕。 我正試圖實現GetTaxi iOS應用程序的效果。那裏一切都非常順利。但仍然沒有運氣 – quarezz

回答

6

Google用谷歌地圖sdk 1.10.0修復了這個問題。

的解決方法是隻需添加這行配置GMSMapView中時:

_mapView.settings.allowScrollGesturesDuringRotateOrZoom = NO; 
+0

太酷了。太糟糕了,它不在那裏:) – quarezz

+0

設置錯誤解決了我的問題,現在我想打電話給一個尊敬地理編碼服務來獲取地址。哪個地方更好地調用反向地理編碼svc來減少呼叫。因爲idleAtCameraPosition委託在放大和縮小時也正在調用。 –

3

好吧,經過10天的時間,我終於解決了這個問題! 答案很簡單!

僅有幾步之遙的位置: 1.添加的ImageView作爲標記在GMSMapView中 的頂部2.添加UIPanGestureRecognizer到GMSMapView中(不要忘了設置代理,這一點很重要) 3.然後使用此代碼:

- (void) didPan:(UIPanGestureRecognizer*) gestureRecognizer 
{ 
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) 
    { 
     _mapView.settings.scrollGestures = true; 
    } 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    if (gestureRecognizer.numberOfTouches > 1) 
    { 
     _mapView.settings.scrollGestures = false; 
    } 
    else 
    { 
     _mapView.settings.scrollGestures = true; 
    } 
    return true; 
} 
+0

下面的答案應被視爲SDK更新的正確答案。 – novak

-1

斯威夫特3:

mapView.settings.scrollGestures = false 
+5

請添加更多描述來解釋答案 – jjj

+0

@jjj這只是下面答案上的一個快速版本,實際上沒有任何幫助 ¯\ _(ツ)_ /¯ – quarezz