2010-01-29 71 views
2

我有一个MkMapView,并希望保持地图以用户的位置为中心,这与iPhone地图应用程序在按下范围按钮时所做的一样。iPhone MkMapView锁定中心到用户位置

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

问题是,因为它每半秒钟更新一次(aprox),所以这个方法“setCenterCoordinate”一直被调用,应用程序被挂起。 如果我需要切换到远离地图视图的标签,我必须不断按下另一个标签来完成此操作。

那么,所有这些文本只是为了问是否有合适的方法让MkMapView将其中心设置为用户位置(蓝点)。

感谢

回答

7

我已经描述了一个更好的方式为获得的MKMapViewuserLocation.location财产的更新会通过国际志愿者组织的通知,而不是使用其他位置的经理。 How do I zoom an MKMapView to the users current location without CLLocationManager?

当然,您应该对接收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]; 
    } 
} 

我测试过此代码,它工作正常。

0

除了ddnv的回答是:

千万不要忘记(iOS 6.0或以上viewDidUnload在<)停在视图控制器的viewWillDisappear的观察方法类似:

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

否则,您的应用程序会崩溃硬。

相关问题