MKMapView:在启动用户位置 - >缩放

时间:2011-04-22 16:42:47

标签: iphone objective-c

我有一个MKMapView并且在地图视图中设置了“显示用户位置”。如果应用程序应该使用我的位置的问题,我说是的。然后我看到蓝色的子弹,我可以缩放到当前位置。

我阅读了很多关于此的帖子,但没有解决问题,用户位置不会自动放大。

如果用户允许访问该位置,我希望在启动时进行缩放,否则定义的坐标应该放大。(之后,使用是否允许位置,可以更新,但不应将中心设置为每当我获得位置更新时的用户位置。)

实施此行为的步骤是什么?我试过这个例子:How do I zoom an MKMapView to the users current location without CLLocationManager?和KVO但是它不起作用......

我希望有人有个主意吗?

最诚挚的问候,蒂姆

2 个答案:

答案 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"];
}