Mk Mapview会不断重置用户位置?

时间:2012-02-23 22:12:32

标签: mkmapview

我目前有一张显示10个左右坐标的地图。地图会在打开后立即获取用户位置并以其为中心。当平移页面或缩放不同的级别时,它最终会重置并居中于用户的第一个位置。我已尝试“停止更新位置”并将动画设置为“否”。当用户滚动时,我无法让它保持在位置地图。

- (void)viewDidLoad {
[super viewDidLoad];
self.petrolMap.delegate = self;
self.location = [[CLLocationManager alloc] init];
[location setDelegate:self];
[location setDistanceFilter:0];  // Do not apply a distance filter to the map
[location setDesiredAccuracy:kCLLocationAccuracyBest]; // Use the best accuracy possible when displaying the map
petrolMap.delegate=self; // Display on "Petrol Map" , the mapview for the application}



-(void) mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{MKCoordinateRegion mapRegion;
mapRegion.center = petrolMap.userLocation.coordinate;
mapRegion.span.latitudeDelta=0.02;
mapRegion.span.longitudeDelta=0.02;
[petrolMap setRegion:mapRegion animated:NO];}

2 个答案:

答案 0 :(得分:1)

您的“位置”是位置管理员,当它在您所在的地方运行时,它会发送其代表

locationManager:didUpdateToLocation:fromLocation:

你似乎没有,所以你所做的所有“位置”设置都被浪费了(就你给我们的代码而言,它可能在其他地方有用)并告诉它停止跟踪用户没用。

“(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {MKCoordinateRegion mapRegion;”是petrolMap发送给其代表的内容。在某处你必须设置petrolMap来跟踪用户,它可以在.xib中完成。

无论如何,要停止petrolMap发送消息,请确保运行

[petrolMap setUserTrackingMode:MKUserTrackingModeNone animated:NO];

一些额外的说明:

  • 在didUpdateUserLocation中,您不需要直接引用petrolMap,因为mapView参数设置为MKMapView发送消息的参数。

  • 同样在didUpdateUserLocation中,您使用的是petrolMap的userLocation而不是参数userLocation,甚至可以构建您的区域。该函数的整个代码可以是一行

    [mapView setRegion:mapRegion animated:NO];
    
  • '动画'控制区域更改的完成方式。是的意思是它会在不同地点之间滑动,否则意味着它会立即从一个地方突然移动到另一个地方,无论地图将移动到新地区。

  • 您的viewDidLoad方法可以剪切为两行,如下所示

    [super viewDidLoad];
    self.petrolMap.delegate = self;
    

附录:

locationManager:didUpdateToLocation:fromLocation 

在iOS6中已弃用。

答案 1 :(得分:0)

不幸的是,对于詹姆斯来说这是几年到晚了 - 但希望它会帮助那些陷入困境的人(像我一样)。

我最后加了......

[self.mapView setUserTrackingMode:MKUserTrackingModeFollow];

进入我的-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

您通常应添加"动画:是"最后,但是这又将它回到我当前的位置,即使我把指挥官改成了#34; NO" - 所以尝试删除它,它工作!!!

仅供参考,我的整个代码变为:

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{

if(userLocationShown) return;

MKCoordinateRegion region;
MapView.showsUserLocation = YES;
region.center.latitude = MapView.userLocation.coordinate.latitude;
region.center.longitude = MapView.userLocation.coordinate.longitude;
region.span = MKCoordinateSpanMake(0.02,0.02);
[MapView setRegion:region animated:YES];

[self.mapView setUserTrackingMode:MKUserTrackingModeFollow];
[locationManager startUpdatingLocation];
[locationManager stopUpdatingLocation];

userLocationShown = YES;

我添加了......

- (void)viewDidLoad {
[super viewDidLoad];

[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
MapView.delegate = self;