更改UIScrollView捏缩放速度

时间:2015-02-23 16:02:30

标签: ios objective-c uiscrollview zoom uipinchgesturerecognizer

我想降低UIScrollView的缩放速度行为。

我已经尝试了这两个答案中给出的解决方案:Answer 1Answer 2,但我没有得到预期的结果。

这是我对答案2的实现:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

    if(scrollView.multipleTouchEnabled){

        CGFloat fSpeedZoom = 2;
        CGFloat fMaxZoomScale = scrollView.maximumZoomScale;
        CGFloat fMinZoomScale = scrollView.minimunZoomScale;

        scrollView.maximumZoomScale = scrollView.zoomScale + fSpeedZoom;
        scrollView.minimumZoomScale = scrollView.zoomScale - fSpeedZoom;

        if(scrollView.maximumZoomScale > fMaxZoomScale){
            self.scrollView.maximumZoomScale = fMaxZoomScale;
        }

        if(scrollView.minimumZoomScale < fMinZoomScale){     
            self.scrollView.minimumZoomScale = fMinZoomScale;
        }
    }
}

如果我将fSppedZoom值保持在2到5之间,我会得到一种指数行为,其中我尝试进一步缩放,缩放的速度越慢。我想得到一个线性行为,其中使用单个参数我可以控制缩放速度。

1 个答案:

答案 0 :(得分:0)

我建议不要这样做。

当您拖动时,拖动开始时手指下方的点会在拖动平移时停留在手指下方。在你到达可拖动区域的边缘之前,情况仍然如此,此时点的移动方向与平移方向相同,但不是很远,以模拟阻力。

当你捏缩放时,会发生同样的事情。当捏移动时,两个手指下方的两个点会留在手指下方(因此您可以在缩放的同时平移)。同样,只有在无法进一步缩放时才会出现故障。

如果你打破这种接触点关系,用户互动就会感到异常和不自然。

如果您绝对必须这样做,我建议您不要试图与UIScrollView的内置缩放行为进行对抗,实施您自己的捏手势识别器并考虑关系想要在你的触摸位置和你想要显示的滚动视图区域之间实现。