2014-02-07 34 views
8

我希望能夠檢測用戶是否縮小或移動地圖中心。我已經看過有關事件監聽器的帖子,但是在Javascript中,我試圖查看Google Maps iOS SDK中是否有類似的東西。我看到iPad Yelp應用程序具有類似的功能,如果您放大/縮小或移動地圖,工具欄將從底部顯示,並讓用戶知道他們是否想要「重新搜索區域」。我想要做類似的事情,並用其他/更多的標記重新加載地圖。是否有用於平移或縮放地圖的Google Map事件偵聽器?

我看過谷歌地圖的參考指南,但遺憾的是還沒有找到任何東西。如果任何人有類似的東西或有任何指導如何可以完成,任何信息將是偉大的。提前致謝!

鏈接到谷歌地圖文檔我已經看了看:

https://developers.google.com/maps/documentation/ios/reference/protocol_g_m_s_map_view_delegate-p

https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_coordinate_bounds

回答

9

我用這個委託檢測相機的變化,其中包括縮放和位置:

- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position; 

編輯

與此代碼,你可以得到分享範圍區域的角落:

NSLog(@"%f,%f",_mapView.projection.visibleRegion.farLeft.latitude,_mapView.projection.visibleRegion.farLeft.longitude);//north west 
NSLog(@"%f,%f",_mapView.projection.visibleRegion.farRight.latitude,_mapView.projection.visibleRegion.farRight.longitude);//north east 
NSLog(@"%f,%f",_mapView.projection.visibleRegion.nearLeft.latitude,_mapView.projection.visibleRegion.nearLeft.longitude);//south west 
NSLog(@"%f,%f",_mapView.projection.visibleRegion.nearRight.latitude,_mapView.projection.visibleRegion.nearRight.longitude);//south east 
+0

令人驚歎!我如何使用它來檢測相機或地圖是否超出幀/邊界/區域?我是否會創建自己的位置對象並查看兩者是否相同?另外,如何獲得右上角和左下角座標? – Chris

+0

更新了我的回答 – allemattio

5

嘗試委託方法- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture,該BOOL參數告訴你的MapView由用戶移動或沒有。

+0

謝謝!我如何檢測用戶是否已經離開某個特定區域。我有這些標記,並已設置地圖顯示所有的標記,並希望在離開此區域時重新加載新的標記。我知道谷歌地圖有'GMSVisibleRegion',但不知道如何使用它與任何這些委託調用。有任何想法嗎? – Chris

+0

@Chris,看起來你有兩件事要做:第一是顯示工具欄,第二是基於當前可見區域重新加載標記?如果是的話,我會在' - (void)mapView:(GMSMapView *)中顯示工具欄mapView willMove:(BOOL)gesture'並在' - (void)mapView:(GMSMapView *)中重新加載標記mapView didChangeCameraPosition :(GMSCameraPosition * )position'。另外,'didChangeCameraPosition'委託將在移動過程中多次調用,您可能會在延遲期內重新加載標記。 –

1

檢測移動/縮放結束Google Map view:

我遇到這個問題的同時尋求如何檢測谷歌地圖是以移動/縮放來獲取地圖的中心。正如Allemattio所建議的那樣,我試圖在didChangeCameraPosition中捕獲這個事件,但是當我們平移或縮放地圖時,這就是多次調用。幸運的是,我發現了另一個地圖視圖的代表方法,當我們結束了平移或縮放地圖視圖時,我們會調用該方法:

-(void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 
{ 
     NSLog(@"mapView ended with panning/zooming in %s",__PRETTY_FUNCTION__); 
} 
+0

這是減少方法調用的最佳方法,因爲didChangeCameraPosition多次調用soo!感謝名單 – Bishan

相關問題