在缩放时防止在MKMapView中滚动

Nil*_*nch 21 iphone objective-c mkmapview ipad ios

scrollEnabled一旦用户开始在MKMapView中进行捏合,这似乎是易碎的.

您仍然无法用一根手指滚动,但如果您在放大和缩小时用两根手指滚动,则可以移动地图.

我试过了 :

  • 对其进行子类化MKMapKit以禁用其中的滚动视图.
  • 实施 - mapView:regionWillChangeAnimated:强制执行中心.
  • 禁用scrollEnabled.

但没有运气.

任何人都可以告诉我一个只有放大MKMapView的确定方法,所以中心点始终保持在中间?

Fel*_*lix 30

您可以尝试使用以下方法自行处理捏合手势UIPinchGestureRecognizer:

首先设置scrollEnabledzoomEnabledNO创造的手势识别:

UIPinchGestureRecognizer* recognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self
                                                                                 action:@selector(handlePinch:)];
[self.mapView addGestureRecognizer:recognizer];
Run Code Online (Sandbox Code Playgroud)

在识别器处理程序中MKCoordinateSpan根据缩放比例调整:

- (void)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
    static MKCoordinateRegion originalRegion;
    if (recognizer.state == UIGestureRecognizerStateBegan) {
        originalRegion = self.mapView.region;
    }    

    double latdelta = originalRegion.span.latitudeDelta / recognizer.scale;
    double londelta = originalRegion.span.longitudeDelta / recognizer.scale;

    // TODO: set these constants to appropriate values to set max/min zoomscale
    latdelta = MAX(MIN(latdelta, 80), 0.02);
    londelta = MAX(MIN(londelta, 80), 0.02);
    MKCoordinateSpan span = MKCoordinateSpanMake(latdelta, londelta);

    [self.mapView setRegion:MKCoordinateRegionMake(originalRegion.center, span) animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

这可能不像Apple的实现那样完美,但它应该可以解决您的问题.

  • 将最后一行的animated:YES 更改为animated:No 并且工作顺利。 (2认同)