Swift - 在图像而不是视图上使用手势识别器

Posted

技术标签:

【中文标题】Swift - 在图像而不是视图上使用手势识别器【英文标题】:Swift - Using gesture recognizers on an image but not the view 【发布时间】:2021-08-24 15:22:46 【问题描述】:

我有一个包含单个图像的 UIImageView。在情节提要中,我在图像视图上放置了一个平移手势识别器。它有效,但是,我只能重新定位整个 UIImageView 而不仅仅是图像。在下面的示例中,我希望红框始终保持不变。我只想重新定位底层图像。

我的捏手势识别器的代码显然是在转换 imageView,这就是问题所在。但我没有看到将手势识别器附加到图像本身的方法。或者,如果这就是我应该尝试做的......

@IBAction func scaleImage(_ sender: UIPinchGestureRecognizer) 
   imageView.transform = CGAffineTransform(scaleX: sender.scale, y: sender.scale)

【问题讨论】:

【参考方案1】:

当你说的时候

重新定位整个 UIImageView 而不仅仅是图像

听起来您认为UIImageView 内部有一些图像视图容器。

但事实并非如此。 UIImageView 已经是你能得到的最低级别了。下面有一个layer,但它绑定到视图。

当您更改 UIImageView 的转换时,这会影响手势计算,这就是您出现问题的原因。

我建议你用UIView 包裹UIImageView 并为此容器视图添加手势识别器。

另外根据您的需要,最简单的解决方案可能是将图像放在UIScrollView 中并启用缩放,这将允许用户缩放和滚动图像。

【讨论】:

我认为我可以使用图像视图的图像属性,以便仅更改它。有点像 contentMode 似乎是基于它的设置。但是您的两个解决方案都有意义,所以我会尝试一下。谢谢!

以上是关于Swift - 在图像而不是视图上使用手势识别器的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 使用/传递手势识别器用于视图中的多个表视图或集合视图(Swift)

iOS - 在视图(Swift)中为多个Tableview或Collectionviews使用/传递手势识别器

iOS Swift - 使点击手势识别器在视图下工作

如何在弹出视图上识别手势而不中断下方视图上的手势识别?

Xamarin.Forms 警告:尝试使用 iOS 图像/手势识别器在其视图不在窗口层次结构中的 * 上呈现 *

在 CustomView 中为视图而不是子视图点击手势识别器