2

我有一个 MkMapView 并希望将地图保持在用户位置的中心,就像您按下范围按钮时 iPhone 地图应用程序所做的那样。

我正在使用 setCenterCoordinate 方法,因为我不需要设置缩放。每次从位置管理器更新位置时,我都会使用它。

问题是它每半秒更新一次(大约),这个方法“setCenterCoordinate”一直被调用,并且应用程序有点挂起。如果我需要切换到远离地图视图的选项卡,我必须按住另一个选项卡来完成此操作。

好吧,所有这些文本只是为了询问是否有适当的方法使 MkMapView 将其中心设置为用户位置(蓝点)。

谢谢

4

2 回答 2

7

我已经描述了一种通过 KVO 通知而不是使用另一个位置管理器 来获取userLocation.location属性更新的更好方法。如何在没有 CLLocationManager 的情况下将 MKMapView 缩放到用户当前位置?MKMapView

当然,您应该对接收 KVO 通知的方法进行一些更改。像这样的东西:

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

    if ([self.mapView isUserLocationVisible]) {  
       [self.mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate
                                animated:YES];
    }
}

我已经测试了这段代码,它工作正常。

于 2010-04-08T12:05:02.380 回答
0

除了 ddnv 的回答:

永远不要忘记在 ViewController 的 viewWillDisappear(或 < iOS 6.0 中的 viewDidUnload)方法中停止观察者,如下所示:

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

否则,您的应用程序将严重崩溃。

于 2013-01-06T16:39:46.763 回答