如果它连接的 UIImageView 在 UIScrollView 下,是不是可以让 Tap Gesture Recognizer 工作?
Posted
技术标签:
【中文标题】如果它连接的 UIImageView 在 UIScrollView 下,是不是可以让 Tap Gesture Recognizer 工作?【英文标题】:Is it possible to make Tap Gesture Recognizer work if UIImageView it's connected to is under UIScrollView?如果它连接的 UIImageView 在 UIScrollView 下,是否可以让 Tap Gesture Recognizer 工作? 【发布时间】:2017-03-22 20:57:17 【问题描述】:请看截图
我有一个带有 Tap Gesture Recognizer 的 UIImageView 连接到它(“Mans body image view”)。当我点击这个 UIImage 时,我希望它调用一个带有颜色的键盘,这样我就可以改变这个男人形象的肤色。
现在它不起作用,因为在 Mans 身体图像视图的顶部,我有 4 个滚动视图,它们负责头发、面部毛发和衣服(上衣和下装)。
有什么方法可以让点击手势识别器(在滚动视图下)对我的点击做出反应?
谢谢
【问题讨论】:
尝试使用 UIGestureRecognizer 的委托 developer.apple.com/reference/uikit/uigesturerecognizerdelegate 并实现其方法,以便滚动视图的手势识别器不会阻止您的点击手势识别器。不幸的是,您可能必须使用自定义 UIScrollView 子类的那些滚动视图实例才能为滚动视图识别器实现这些方法。这是因为只有 UIScrollView 可以作为其手势识别器的代理。 【参考方案1】:创建一个UIScrollView subclass
并实施
func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWith: UIGestureRecognizer)
询问代理是否应该允许两个手势识别器同时识别手势。
func gestureRecognizer(_ gestureRecognizer: UIPanGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UISwipeGestureRecognizer) -> Bool
return true
或者改用水平 UICollectionView 并实现委托方法didSelectItemAtIndexPath
。
【讨论】:
我更喜欢 UICollectionView,它是为显示图像集合而创建的,它有适当的方法来处理点击手势。如果您不想重新创建自行车,这是最好的选择;)另外,我建议您阅读文档并比较滚动视图和集合视图(继承自滚动视图)的 API,您将了解差异并做好准备为将来做出这样的决定! 据我了解,带有 Tap 手势识别器的 UIImageView 仍将位于 UICollectionView 下,不是吗? 不,UICollectionView 有这个开箱即用的委托方法 didSelectItemAtIndexPath。 感谢您的帮助。现在玩 UICollectionView。更多问题来了:)以上是关于如果它连接的 UIImageView 在 UIScrollView 下,是不是可以让 Tap Gesture Recognizer 工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 UIImageView 尊重它的 superview.layer.mask