Swift - 在图像而非视图上使用手势识别器
Swift - Using gesture recognizers on an image but not the view
我有一个包含单个图像的 UIImageView。在故事板中,我在图像视图上放置了一个平移手势识别器。它有效,但是,我只能重新定位整个 UIImageView 而不仅仅是图像。在下面的示例中,我希望红色框始终保持不变。我只想重新定位底层图像。
我的捏合手势识别器的代码显然正在转换 imageView,这就是问题所在。但我看不到将手势识别器附加到图像本身的方法。或者如果这就是我应该尝试做的...
@IBAction func scaleImage(_ sender: UIPinchGestureRecognizer) {
imageView.transform = CGAffineTransform(scaleX: sender.scale, y: sender.scale)
}
当你说
reposition the entire UIImageView and not just the image
听起来您认为 UIImageView
中有一些图像视图容器。
但这不是真的。 UIImageView
已经是你能拿到的最低等级了。下面有一个layer
,但是绑定到视图上了。
当您更改 UIImageView
的变换时,这会影响手势计算,这就是您出现问题的原因。
我建议你用 UIView
包装 UIImageView
并为此容器视图添加手势识别器。
另外,根据您的需要,最简单的解决方案可能是将图像放在 UIScrollView
中并启用缩放功能,这将允许用户缩放和滚动图像。
我有一个包含单个图像的 UIImageView。在故事板中,我在图像视图上放置了一个平移手势识别器。它有效,但是,我只能重新定位整个 UIImageView 而不仅仅是图像。在下面的示例中,我希望红色框始终保持不变。我只想重新定位底层图像。
我的捏合手势识别器的代码显然正在转换 imageView,这就是问题所在。但我看不到将手势识别器附加到图像本身的方法。或者如果这就是我应该尝试做的...
@IBAction func scaleImage(_ sender: UIPinchGestureRecognizer) {
imageView.transform = CGAffineTransform(scaleX: sender.scale, y: sender.scale)
}
当你说
reposition the entire UIImageView and not just the image
听起来您认为 UIImageView
中有一些图像视图容器。
但这不是真的。 UIImageView
已经是你能拿到的最低等级了。下面有一个layer
,但是绑定到视图上了。
当您更改 UIImageView
的变换时,这会影响手势计算,这就是您出现问题的原因。
我建议你用 UIView
包装 UIImageView
并为此容器视图添加手势识别器。
另外,根据您的需要,最简单的解决方案可能是将图像放在 UIScrollView
中并启用缩放功能,这将允许用户缩放和滚动图像。