0

所以我正在构建一个基于位置的游戏,并且在让用户位置正确初始化时遇到问题。它并不总是发生,但有时位置永远不会从 0,0 改变。

这会导致一个问题,因为我有一个加载视图(保险库),它会阻止地图显示,直到加载玩家的位置而不是 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
        }
    }
}
4

1 回答 1

0

您似乎试图从_mapView.userLocationCLLocation 对象中获取位置。

您应该使用locations传递给您的方法的数组中的最后一项。

另请参阅文档带有片段的指南

于 2012-12-04T05:08:40.490 回答