是否有一种方法来修复一个MKMapView的中心点,特别是当用户改变缩放级别



我试图在一个点上有一个地图视图中心,这样用户可以平滑地放大和缩小,但保持在该点的中心。

当regionDidChangeAnimated被调用时,我有一个不太理想的解决方案,通过将地图集中,加上一个标志来停止代码无限循环…

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    if (!self.isRecentring) {
        self.isRecentring = YES;
        [mapView setCenterCoordinate:self.centreLocation animated:YES];
        self.isRecentring = NO;
    }
}

所以,这是有效的,但只有在用户完成缩放后才会起作用,这意味着之后有一个快速滚动来重新定位地图。

我已经尝试了等效的regionWillChangeAnimated,但这只是杀死缩放死亡,我假设因为我的setCentreCoordinate设置了一个新的区域和结束缩放手势?

有什么办法可以解决这个问题,并保持中点变焦吗?

我知道这是旧的,但我想出了一个解决方案,似乎没有任何渲染问题。

  1. 在mapView
  2. 中设置scrollEnabledzoomEnabledrotateEnabled为false
  3. 在地图视图中添加UIPinchGestureRecognizer
  4. 在缩放手势识别器处理程序中,保存手势开始时的区域。您可以使用recognizer.state == .began来检测。
  5. 在缩放手势识别器处理程序中,当recognizer.state == .changed时,将开始区域的span.longitudeDeltaspan.latitudeDelta乘以recognizer.scale,并执行没有动画的mapView.setRegion

相关内容

最新更新