用户跟踪模式为MKUserTrackingModeFollowWithHeading时,MKMapView无法正确缩放

Oss*_*sir 11 objective-c mapkit ios

我用几行代码和两个组件创建了一个测试项目:MKMapViewUIButton.我勾选了mapView选项 - Shows user location.我还为按钮定义了一个动作,它将地图缩放到用户位置.

这是来自控制器的代码:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
    self.mapView.delegate = self;
}

- (IBAction)changeRegion:(id)sender {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

非常简单明了,不是吗?但是当我点击按钮时,我看到了奇怪的行为:地图视图缩放到指定区域然后返回到原始缩放.有什么问题?如何同时保持缩放和跟踪用户位置?

我注意到MKUserTrackingModeFollow跟踪模式的类似行为.

PS我忘了提到它主要是iOS7的问题

The*_*ude 8

从苹果文档:

将跟踪模式设置为MKUserTrackingModeFollow或MKUserTrackingModeFollowWithHeading会使地图视图将地图置于该位置的中心,并开始跟踪用户的位置.如果地图缩小,地图视图会自动放大用户的位置,从而有效地更改当前可见区域.

如果您想要调整区域和跟踪用户,我建议您检查位置更新并相应地调整缩放.

例如:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

编辑

不要设置区域,只需设置中心,

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
    [self.mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

让你的按钮动作设置缩放,保持相同的中心:

- (IBAction)changeRegion:(id)sender {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.centerCoordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

非常重要:不要将mapView设置为跟踪用户.禁用跟踪用户,因为现在您自己跟踪它.我认为默认是MKUserTrackingModeNone.

  • 跟踪用户本人非常迟钝,标题/位置跳跃。我认为苹果正在做一些内部工作来猜测下一个变化。使用本机跟踪模式而不诉诸自定义跟踪时,有没有办法调整缩放比例? (3认同)
  • 您可以在用户位置显示图标而无需跟踪用户.你只需要:[mapView setShowsUserLocation:YES]; 这将在地图上显示蓝点,但不会跟随用户.干杯. (2认同)
  • @yuf 我有完全相同的要求。5年后。 (2认同)