【问题标题】:User Location Mapkit ViewDidLoad用户位置 Mapkit ViewDidLoad
【发布时间】:2014-04-30 21:45:38
【问题描述】:

因此,从我在这里看到的多个答案来看,这是在应用加载时如何居中和缩放用户位置并且效果很好。

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
    NSLog(@"Did update user location");
    MKCoordinateRegion mapRegion;
    mapRegion.center = mapView.userLocation.coordinate;
    mapRegion.span.latitudeDelta = 0.2;
    mapRegion.span.longitudeDelta = 0.2;

    [map setRegion:mapRegion animated: YES];

}

但是,当您每次调用此委托方法时都开始使用地图时,它会将我带回到用户位置。如果我停止用户位置更新,我该如何处理?我试过把这段代码放在视图中确实加载了,所以我得到了初始缩放和中心,但它不起作用?或者也许我可以将代码放在另一个地图工具包委托方法中,我只是不知道正确的方法。其他人是如何做到这一点的?

【问题讨论】:

    标签: ios mapkit mkuserlocation


    【解决方案1】:
    -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
    

    是一个 mapKit 委托方法,每次用户位置改变时都会调用。这就是为什么您的地图将在每次通话时以用户的位置为中心。您不能使用它来在应用启动时在用户位置上初始化地图。

    我认为,如果它在 viewDidLoad 上不起作用,那是因为当时应用还不知道用户的位置。在那里放一个断点,你自己看看。

    对我来说,您应该在 viewDidLoad 中添加一个观察者,当应用获取用户位置数据时调用该观察者

    // Check if user authorized use of location services
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
        // Add observer
        [self.mapView.userLocation addObserver:self
                                    forKeyPath:@"location"
                                       options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
                                       context:NULL];
    }
    

    然后在

    - (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context;
    

    等待 keyPath“位置”被调用。 当它第一次触发时,视图被加载并且应用程序知道用户的位置。然后,您可以将代码放在用户位置的地图中心。 但是请确保移除观察者,这样它就不会被多次调用。

    [self.mapView.userLocation removeObserver:self
                                       forKeyPath:@"location" context:NULL];
    

    【讨论】:

    • 绝妙的答案!在那一点上,您完全正确,尚未找到用户位置!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多