设置 UIScrollView 的捏合手势原点



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

  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中缩放和平移图像(看起来有些过头了,对我来说太复杂了,我不确定这是否真的有助于我的情况)

我怎样才能用滚动视图实现自然捏手,我做错了什么?

谢谢,可以

这个问题的答案很简单:完全删除捏手势。使用UIScrollView的好处是它可以在内部处理平移/缩放,而无需执行

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

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

这应该可以解决你的问题

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

最新更新