簡體   English   中英

用MKMapView顯示當前用戶位置?

[英]Show Current User Location with MKMapView?

我試圖通過將MKMapView的屬性設置為顯示用戶的當前位置,即setShowsUserLocationYES 默認情況下,當應用程序開始更新用戶位置時,iPhone屏幕左上角會出現一個箭頭。但是在顯示當前位置后,箭頭應該消失,但只要應用程序正在運行,它仍然存在,這意味着應用程序仍處於靜止狀態在后台更新位置? 那我怎么能停止更新當前位置? 我已經實現了立即調用的委托..

如果地圖可見且showUserLocation設置為YES,則會在后台繼續更新。

當視圖消失或應用程序轉到后台時,您需要取消設置。 最好的方法可能是注冊您的viewController,以獲得UIApplicationDidEnterBackgroundNotificationUIApplicationDidBecomeActiveNotification通知。

- (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM