Iphone MKMapView:启动时用户位置->;缩放

Iphone MKMapView:启动时用户位置->;缩放,iphone,objective-c,Iphone,Objective C,我有一个MKMapView,在地图视图中设置了“显示用户位置”。如果应用程序应该使用我的位置,我会说是的。然后我看到蓝色的子弹,我可以缩放到当前位置 我读了很多其他关于这方面的文章,但没有任何解决问题的办法,用户位置不会自动放大 如果用户允许访问位置,我希望在启动时进行缩放,否则定义的坐标应放大。(之后,如果使用允许位置,则可以对其进行更新,但不应在每次我获得位置更新时将中心设置为用户位置) 实现此行为的步骤是什么?例如,我尝试了以下方法:使用KVO,但它不起作用 我希望有人有主意 向您致意,T

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

我读了很多其他关于这方面的文章,但没有任何解决问题的办法,用户位置不会自动放大

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

实现此行为的步骤是什么?例如,我尝试了以下方法:使用KVO,但它不起作用

我希望有人有主意


向您致意,Tim

您是否尝试过委托方法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];
    }
}

您可以在
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"];
}

我有我的错误,它在4.x上有效,但在3.x上无效:-(但是,如果用户位置不可用(因为没有GPS或用户不允许使用该位置),如何将坐标设置为固定位置)?
mapView:didUpdateUserLocation:
在iOS 4.0及更高版本中可用,因此如果你的目标是3.x,你就不走运了。我在我的应用程序中做了类似的事情,但顺序不同。我先缩放到默认位置。然后,如果用户允许且GPS获得了定位,则缩放到用户位置。如果不允许,地图将保持在默认位置,不会发生任何事情。这在你的情况下有意义吗?是的,我认为这比另一种方式要好得多,因为如果用户允许,但GPS不可用(在建筑物内),不会发生任何事情。但是,如果用户位置更改,它不应该返回到用户位置并在屏幕中居中,否则您不能滚动到其他位置,因为使用您的代码,它总是返回到用户位置。您可以提供一些代码吗?我编辑了代码,以便地图视图仅缩放到用户位置第一次。对于iOS 5.0及更高版本:[mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];