如何使用 UIGestureRecognizers 相对于触摸位置在 UIScrollView 内旋转 UIImageView

Posted

技术标签:

【中文标题】如何使用 UIGestureRecognizers 相对于触摸位置在 UIScrollView 内旋转 UIImageView【英文标题】:How to rotate a UIImageView inside a UIScrollView using UIGestureRecognizers, relative to the touch location 【发布时间】:2018-10-15 22:42:50 【问题描述】:

我正在寻找如何在 UIScrollView 内实现 UIImageView 的 UIRotationGestureRecognizer 的示例,其中旋转是相对于触摸发生的位置执行的,而不是相对于 UIImageView 的原点。

在我发现的大多数示例中,ImageView 围绕它自己的中心点旋转。换句话说,如果你将两根手指放在图像的左上角,并转动它们(以执行旋转手势),UIImageView 将围绕它自己的原点旋转。

我正在寻找的行为将使 UIImageView 围绕触摸点旋转。

虽然有很多关于如何在 ScrollView 中为 ImageView 实现 UIRotationGestureRecognizer 的教程,但我还没有找到任何描述如何执行与触摸相关的旋转的教程。

【问题讨论】:

您希望整个滚动视图内容围绕触摸中心旋转,还是仅滚动视图中的图像视图? 【参考方案1】:

UIRotationGestureRecognizer 返回一个旋转角度。

基类UIGestureRecognizer有一个方法

location(ofTouch:in:) 和一个变量 numberOfTouches

在手势识别器的 valueChanged 处理程序中,您应该能够获取 2 次触摸,找到这两个点的中点,然后围绕该点而不是视图中心应用旋转。

【讨论】:

我做到了——location(in:) 给了我说 2 次触摸的中心点,这就是我想要的。但是应用转换很棘手。 确实如此。您应该创建一个转换:将所需的旋转点平移到原点、旋转并向后平移。

以上是关于如何使用 UIGestureRecognizers 相对于触摸位置在 UIScrollView 内旋转 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

UIGestureRecognizers 没有响应

UIGestureRecognizers 干扰 UIToolbar?

UIGestureRecognizers vs touchesBegan/touchesMoved/touchesEnded(准确度)

您可以在不禁用其附加的 UIGestureRecognizers 的情况下禁用 UIButton 吗?

如何用 UIGestureRecognizer 替换 TouchesBegan

如何将 UIView 中的一部分用于手势识别器?