我有一个MKMapView
并且在地图视图中设置了“显示用户位置”。如果应用程序应该使用我的位置的问题,我说是的。然后我看到蓝色的子弹,我可以缩放到当前位置。
我阅读了很多关于此的帖子,但没有解决问题,用户位置不会自动放大。
如果用户允许访问该位置,我希望在启动时进行缩放,否则定义的坐标应该放大。(之后,使用是否允许位置,可以更新,但不应将中心设置为每当我获得位置更新时的用户位置。)
实施此行为的步骤是什么?我试过这个例子:How do I zoom an MKMapView to the users current location without CLLocationManager?和KVO但是它不起作用......
我希望有人有个主意吗?
最诚挚的问候,蒂姆
答案 0 :(得分:24)
您是否尝试过委托方法mapView:didUpdateUserLocation:?
我在我的代码中使用了类似的东西:
在.h文件中:
@property (nonatomic, retain) CLLocation* initialLocation;
在.m文件中:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if ( !initialLocation )
{
self.initialLocation = userLocation.location;
MKCoordinateRegion region;
region.center = mapView.userLocation.coordinate;
region.span = MKCoordinateSpanMake(0.1, 0.1);
region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}
}
答案 1 :(得分:2)
你可以在viewDidLoad
编写此代码
self.mapDetail.showsUserLocation = YES;
[self.mapDetail.userLocation addObserver:self
forKeyPath:@"location"
options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
context:nil];
并且此方法将执行任务
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
MKCoordinateRegion region;
region.center = self.mapDetail.userLocation.coordinate;
MKCoordinateSpan span;
span.latitudeDelta = 1; // Change these values to change the zoom
span.longitudeDelta = 1;
region.span = span;
[self.mapDetail setRegion:region animated:YES];
[self.mapDetail.userLocation removeObserver:self forKeyPath:@"location"];
}