0
因此,我正在構建基於位置的遊戲,並且在獲取用戶位置以正確初始化時遇到問題。 它並不總是發生,但有時位置永遠不會從0,0變化。iOS Mapkit - 用戶位置顯示爲0,0
這會導致一個問題,因爲我有一個加載視圖(Vault),阻止地圖顯示直到玩家位置加載,而不是0,0。因此,如果用戶位置沒有設置,保險櫃永遠不會打開顯示地圖。
有沒有其他方法可以確保用戶位置被加載?僅供參考 - 我已經確保他們已啓用位置服務並且他們的設備有能力。 我在自己的設備上開啓和關閉了這個問題,並正確啓用了所有功能。
viewDidLoad中:
/*Location Manager*/
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setDistanceFilter:100.0];//Update location to network when player moves X meters
[locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer];//Nearest 1000 meters (.33 miles)
[locationManager startUpdatingLocation];
/*Map View*/
mapLoaded = false;
currentFilter = 0;
[_mapView setDelegate:self];
[_mapView setShowsUserLocation:YES];
[_mapView setMapType:MKMapTypeSatellite];
位置經理代表:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//Wait until User Location is initialized (NOT 0,0)
NSLog(@"Latitude: %f, Longitude: %f",_mapView.userLocation.coordinate.latitude,_mapView.userLocation.coordinate.longitude);
if(_mapView.userLocation.location.coordinate.latitude!=0.00 && _mapView.userLocation.location.coordinate.longitude!=0.00){
//Update Player Object
[player setLatitude:_mapView.userLocation.location.coordinate.latitude];
[player setLongitude:_mapView.userLocation.location.coordinate.longitude];
[player updatePlayerLocation];//Update location to network
if(mapLoaded){//Map already loaded, call refresh
[self refreshMap];
}
else{//First load of map
[_mapView setCenterCoordinate:_mapView.userLocation.location.coordinate];
[self populateMap];
[self openVault];
mapLoaded = true;//Disable map first load
//timerMap = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(refreshMap) userInfo:nil repeats:YES];//Auto-Refresh of Map
}
}
}
尤里卡!因此,在審閱文檔之後,問題是一些緩存的「最後位置」被加載,從而導致3或4次調用委託方法。通過使用蘋果公司的無視具有舊時間戳的位置的示例,我只能獲取用戶的當前位置並忽略緩存的位置。感謝您治療我的頭痛! – JimmyJammed
不客氣!很高興我能幫上忙。 –