2014-06-24 96 views
2

有沒有辦法確定MKMapView是否停止拖動和縮放?檢測結束拖動/縮放MKMapView

現在我添加了UIPanGestureRecognizer來拖動MKMapView,但即使地圖滾動時用戶擡起手指,我也會立即收到gestureRecognizer.state == UIGestureRecognizerStateEnded。我試圖弄清楚的是,在地圖仍然移動時和/或用戶再次觸摸地圖再次拖動地圖時,如何防止爲我的地圖註釋加載服務器數據?只有在地圖停止移動和縮放並靜止一段預定時間時才應調用數據加載機制。

這是我到目前爲止已經實現:

- (void)viewDidLoad { 
... 
    UIPanGestureRecognizer* panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didDragMap:)]; 
    [panRec setDelegate:self]; 
    [panRec setDelaysTouchesBegan:YES]; 
    [panRec setDelaysTouchesEnded:YES]; 
    [panRec setCancelsTouchesInView:YES]; 
    [self.mapView addGestureRecognizer:panRec]; 
} 

和選擇方法 didDragMap:

- (void)didDragMap:(UIGestureRecognizer*)gestureRecognizer { 
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { 
    _searchBar.text = @""; 
    _filtered = NO; 
    _crosshair.hidden = NO; 
    [self removeAllAnnotationExceptOfOriginalLocation]; 
} 
else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { 
    [self performSelector:@selector(delayAddressResolving:) withObject:nil afterDelay:1.0]; 
} 

}

的選擇方法 delayAddressResolving:是裝所需的數據從服務器顯示我的註釋信息。

歡迎各位注意!

+0

你找到一些解決方案嗎?我有同樣的概率。 – Jasmeet

+0

在我的情況下,我執行了一個獨立線程,該線程正在檢查放置在中間的Pin的Lat Long。如果當前和以前的值發生變化,API將被調用。請分享您的解決方案。 – Jasmeet

回答

0

使用以下方法MKMapViewDelegate

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated 
    - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 

這些方法稱爲每當地圖區域正在發生變化的時間。

+0

這些委託方法將被多次調用以報告地圖位置更新,如文檔中所寫:[Apple-Documentation](https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/ MKMapViewDelegate.html#// apple_ref/occ/intfm/MKMapViewDelegate/mapView:regionDidChangeAnimated :)這無助於解決當地圖視圖的縮放或滾動完成時檢測時間的問題。我需要找出縮放或滾動完成時的時間,以激發我的註釋下載服務器數據的方法。 – DoK

+0

另外,委託方法不會僅僅響應用戶交互而被調用。例如,動畫影響MapView的佈局更改也會導致調用這些方法。 – StephenT