當用戶放大或滾動地圖時,我想繼續根據MKMapView更新我的用戶界面。 (不僅在滾動結束後,工作正常。)是否可以在滾動/縮放的同時連續跟蹤MKMapView區域?
我試過委託方法mapView:regionWillChangeAnimated:根據文檔,「只要當前顯示的地圖區域發生變化就調用」。在滾動期間,此方法可能會被多次調用以報告地圖位置的更新。「 http://developer.apple.com/library/ios/#DOCUMENTATION/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
[self updateUIAcordingToMapViewRegionChange];
}
但不幸的是,這並不工作,因爲文件似乎並沒有被告知真相。該方法僅在區域更改開始時調用一次。在滾動期間,當手指向下並移動時,該方法不會再被調用。
關於這個問題,我能找到的唯一的職務是由加拿大家園成員namanhams: http://forums.macrumors.com/showthread.php?t=1225172 但是沒有人想出的任何想法...
作爲一種變通方法我試過設置在regionWillChange計時器(和無效它在regionDidChange中):
- (void)handleRegionChange:(NSTimer*)timer
{
[self updateUIAcordingToMapViewRegionChange];
}
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
self.mapRegionIsChangingTimer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(handleRegionChange:)
userInfo:nil
repeats:YES];
}
但是這也行不通。滾動結束後,所有來自定時器的方法調用都會立即執行。好像滾動的MapView阻塞主線程或東西...
我也讀計算器這個職位,但遺憾的是沒有完全理解它: Monitor MKMapView redraw events 因此,如果解決我的問題在於確實在SO-線程,請告訴我,我試圖挖掘它的細節。
我仍然希望我太愚蠢或太盲目,找不到正確的委託方法,並且非常感謝處理MKMapView區域跟蹤的任何提示,解決方法和最佳實踐。
謝謝!
謝謝!我認爲這正是我自己嘗試的(見上面的第二個代碼片段)。我做錯了什麼是:我將計時器存儲在一個屬性中,但與我的代碼片段(我更改爲「更短更清晰」)不同,我只是在實例變量不爲零的情況下才在getter中創建它。但是無效的計時器不會將屬性設置爲零,所以我想我總是在我的mapView改變區域時向runloop添加一箇舊的無效計時器... – Goodsquirrel