设置UIScrollView的捏合手势的来源

时间:2012-11-23 14:33:26

标签: objective-c ios uiview uigesturerecognizer uipinchgesturerecognizer

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

  1. 在界面构建器中,我将滚动查看器放到视图控制器中。
  2. 我在滚动查看器中添加了一个捏合手势识别器。
  3. 我已将手势识别器的操作连接到代码以处理手势事件。
  4. 加载视图控制器后,我将视图的原点更改为中心(viewer是我的滚动查看器):self.viewer.contentOffset = CGPointMake(384, 512);
  5. 在我的处理程序代码中,我处理了这样的事件:
  6. 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的来源,但没有改变。我搜索了这个问题并找到了这些:

    How to set a UIView's origin reference?(已经尝试过)

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

    UIPinchGestureRecognizer for zooming and panning an image in xcode(看起来有点矫枉过正,对我来说太复杂了,我不确定这对我的情况是否真的有帮助)

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

    谢谢, 可以。

1 个答案:

答案 0 :(得分:2)

嗯,问题的答案非常简单:完全取消捏合手势。使用UIScrollView的好处是它在内部处理平移/缩放,你必须什么都不做

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

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

这应该可以解决您的问题

编辑2:还要记住为UIScrollView

设置最小/最大缩放比例