[英]Show Current User Location with MKMapView?
我試圖通過將MKMapView
的屬性設置為顯示用戶的當前位置,即setShowsUserLocation
為YES
。 默認情況下,當應用程序開始更新用戶位置時,iPhone屏幕左上角會出現一個箭頭。但是在顯示當前位置后,箭頭應該消失,但只要應用程序正在運行,它仍然存在,這意味着應用程序仍處於靜止狀態在后台更新位置? 那我怎么能停止更新當前位置? 我已經實現了立即調用的委托..
如果地圖可見且showUserLocation設置為YES,則會在后台繼續更新。
當視圖消失或應用程序轉到后台時,您需要取消設置。 最好的方法可能是注冊您的viewController,以獲得UIApplicationDidEnterBackgroundNotification
和UIApplicationDidBecomeActiveNotification
通知。
- (void)viewDidLoad{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil];
}
然后在此通知調用的方法中,更改有關userLocation
的地圖視圖屬性:
- (void)appToBackground{
[mapview setShowsUserLocation:NO];
}
和
- (void)appReturnsActive{
[mapview setShowsUserLocation:YES];
}
通過在那里設置斷點並返回主屏幕來檢查是否確實調用了這些方法。
我同意Michael Kernahan,我很確定MKMapView
存在競爭條件。
MKMapView
一旦意識到它失去了對位置服務的訪問權限,就會嘗試userLocationAnnotation
刪除userLocationAnnotation
(藍點)。
但是,這似乎沒有受到保護,如果開發人員也發出[mapView setShowsUserLocation:NO]
,由於MKMapView
的內部線程試圖刪除userLocationAnnotation
和線程之間的競爭,很可能會發生崩潰。調用setShowsUserLocation:NO
。
您可以通過向位置管理器發送消息來停止更新位置[self.locationManager stopUpdatingLocation];
至於你的情況,你是否試圖停止顯示用戶位置?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.