Ios 是否有方法固定MKMapView的中心点,特别是当用户更改缩放级别时?

Ios 是否有方法固定MKMapView的中心点,特别是当用户更改缩放级别时?,ios,mkmapview,Ios,Mkmapview,我试图在一个点上有一个地图视图中心,这样用户可以顺利地放大和缩小,但仍保持在该点的中心 当调用regionDidChangeAnimated时,通过将贴图居中,加上一个标志来停止代码无限循环,我得到了一个不太理想的解决方案 -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { if (!self.isRecentring) { self.isRecentring = YES

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

当调用regionDidChangeAnimated时,通过将贴图居中,加上一个标志来停止代码无限循环,我得到了一个不太理想的解决方案

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    if (!self.isRecentring) {
        self.isRecentring = YES;
        [mapView setCenterCoordinate:self.centreLocation animated:YES];
        self.isRecentring = NO;
    }
}
因此,这是可行的,但只有在用户完成更改缩放后才起作用,这意味着之后有一个快速滚动来重新定位地图

我尝试过regionWillChangeAnimated的等效方法,但这只会扼杀zoom dead,我想是因为我的SetCentreCoordination设置了一个新的区域并结束了缩放手势


有什么办法可以解决这个问题并保持中心点的中间缩放吗?

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

  • 在地图视图中将
    滚动启用
    缩放启用
    旋转启用
    设置为false
  • 在地图视图中添加一个
    UIPinchGestureRecognitor
  • 在挤压手势识别器处理程序中,保存手势开始处的区域。您可以使用
    recognizer.state==.start
    来检测此问题
  • 在夹持手势识别器处理程序中,当
    recognizer.state==.changed
    时,将起始区域的
    span.longitudeDelta
    span.latitudeDelta
    乘以
    recognizer.scale
    ,并执行
    mapView.setRegion
    ,不带动画

  • 设置
    scrollEnabled=NO
    有效吗?不,抱歉-scrollEnabled=NO没有乐趣。该区域似乎仍然围绕着用户启动缩放手势的点。相关:感谢您的建议,但他们也没有这样做。第一个解决方案是针对用户的当前位置编写的(当我将其修改为使用其他位置时,它完全停止了缩放工作)。第二种解决方案没有即时反馈(仅在结束捏手动作时调整大小并集中于此),因此在我看来,这几乎和我上面的方法一样不雅观。你有没有找到解决方案?这会使我的缩放效果相反;扩展缩小,收缩放大。