MapKit 仅在地图加载时查找用户



我希望有人能指出我一个方便的委托方法来回答以下问题。

我的问题是:我怎么知道用户是第一次被MapKit定位?

当我的视图出现时,我会告诉我的 MKMapView 定位用户并在用户周围设置地图区域。最初找到用户后,我不想继续将地图更新到他/她的位置。我想让用户可以自由地在地图上平移,而不会自动带回他们的位置。

当定位用户时出现延迟时,

我遇到了问题(例如,用户第一次打开应用程序时,MapKit 不会找到用户,直到他/她同意共享他们的位置)。结果是地图在大西洋的某个地方打开,一旦找到用户,它就不会自行更正。

不幸的是,-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation在确定用户的真实位置之前被调用了几次(测试时,我在同意共享我的位置之前看到了它的NSLog语句)。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mapView.delegate=self;
}
-(void)viewWillAppear:(BOOL)animated{
    [self.mapView setShowsUserLocation:YES];
    [self.mapView setUserTrackingMode: MKUserTrackingModeNone];
    hasUpdatedRegion=NO;
}

//MapKit Delegate Methods
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    NSLog(@"didUpdateUserLocation");
    if(!hasUpdatedRegion)
    {
        hasUpdatedRegion=YES;
        MKCoordinateSpan span=MKCoordinateSpanMake(0.3, 0.3);
        MKCoordinateRegion currentRegion=MKCoordinateRegionMake(mapView.userLocation.coordinate, span);
        [mapView setRegion:currentRegion];
    }
}
-(void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated{
    NSLog(@"didChangeTrackingMode");
}

我有同样的问题。换一种方式...

- (void)viewDidLoad
{
    self.mapView.userTrackingMode = YES;
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    self.mapView.userTrackingMode = NO;
}

首先,将userTrakingMode设置为YES跟踪用户移动。

其次,在将地图更新到用户位置后,触发didUpdateUserLocation,当我禁用跟踪模式时。

这将阻止地图再跟踪用户。

你为什么不尝试设置mapview区域,以便显示整个世界地图而不是特定位置(如你所说的"Atantic ocean"),以防用户不允许mapkit使用当前位置(我的意思是在视图中确实加载方法,设置地图区域.),如果他允许的话。然后根据用户的坐标设置区域。

最新更新