我希望有人能指出我一个方便的委托方法来回答以下问题。
我的问题是:我怎么知道用户是第一次被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使用当前位置(我的意思是在视图中确实加载方法,设置地图区域.),如果他允许的话。然后根据用户的坐标设置区域。