1

我正在创建一个滚动视图来显示一个非常大的视图,并且我需要滚动和缩放功能(就像图像查看器一样)。以下是我已采取的步骤:

  1. 在界面生成器中,我将滚动查看器放入视图控制器。
  2. 我在滚动查看器中添加了捏合手势识别器。
  3. 我已将手势识别器的操作连接到处理手势事件的代码。
  4. 加载视图控制器后,我将视图的原点更改为中心(viewer是我的滚动查看器):self.viewer.contentOffset = CGPointMake(384, 512);
  5. 在我的处理程序代码中,我这样处理事件:

startScale一开始是1.0)

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)sender {
    if(sender.state == UIGestureRecognizerStateEnded){
        startScale *= sender.scale;
    }else{
        float result = sender.scale * startScale;

        self.viewer.transform = CGAffineTransformMakeScale(result, result);
    }
}

当我运行应用程序时,手势被识别并且缩放工作正常,但是,整个视图相对于0,0屏幕的点(左上角)进行缩放。我希望它相对于我正在应用手势的中间点进行缩放,就像放大照片的自然捏合手势一样。

我也尝试过设置self.viewer.frame原点,但没有任何改变。我搜索了这个问题并发现了这些:

如何设置 UIView 的原点参考?(已经尝试过)

https://stackoverflow.com/questions/13163279/pinch-punch-gestures-center(关于我的问题,但未答复)

UIPinchGestureRecognizer 用于在 xcode 中缩放和平移图像(看起来有点矫枉过正,对我来说太复杂了,我不确定这是否真的有助于我的情况)

如何使用滚动视图实现自然捏合,我做错了什么?

谢谢,坎。

4

1 回答 1

2

好吧,问题的答案很简单:完全取消捏合手势。使用 UIScrollView 的好处是它在内部处理平移/缩放,您无需执行任何操作

编辑:为确保内容正确缩放,您将需要一个UIView(称为contentView或任何您想要的)放置所有内容的位置,然后在您的委托方法上UIScrollView执行此操作:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return contentView;
}

这应该可以解决您的问题

编辑 2:还记得为您设置最小/最大缩放比例UIScrollView

于 2012-11-23T14:36:50.753 回答