我试图在一个点上有一个地图视图中心,这样用户可以平滑地放大和缩小,但保持在该点的中心。
当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设置了一个新的区域和结束缩放手势?
有什么办法可以解决这个问题,并保持中点变焦吗?
我知道这是旧的,但我想出了一个解决方案,似乎没有任何渲染问题。
- 在mapView 中设置
- 在地图视图中添加
UIPinchGestureRecognizer
- 在缩放手势识别器处理程序中,保存手势开始时的区域。您可以使用
recognizer.state == .began
来检测。 - 在缩放手势识别器处理程序中,当
recognizer.state == .changed
时,将开始区域的span.longitudeDelta
和span.latitudeDelta
乘以recognizer.scale
,并执行没有动画的mapView.setRegion
。
scrollEnabled
、zoomEnabled
、rotateEnabled
为false