【问题标题】: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 可以作为其手势识别器的代理。

标签: ios swift xcode uiscrollview uitapgesturerecognizer


【解决方案1】:

创建一个UIScrollView subclass 并实施

func gesture​Recognizer(UIGesture​Recognizer, should​Recognize​Simultaneously​With:​ UIGesture​Recognizer)

询问代理是否应该允许两个手势识别器同时识别手势。

func gestureRecognizer(_ gestureRecognizer: UIPanGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UISwipeGestureRecognizer) -> Bool {
    return true
}

或者改用水平 UICollectionView 并实现委托方法didSelectItemAtIndexPath

【讨论】:

  • 我更喜欢 UICollectionView,它是为显示图像集合而创建的,它有适当的方法来处理点击手势。如果您不想重新创建自行车,这是最好的选择;)另外,我建议您阅读文档并比较滚动视图和集合视图(继承自滚动视图)的 API,您将了解差异并做好准备为将来做出这样的决定!
  • 据我了解,带有 Tap 手势识别器的 UIImageView 仍将位于 UICollectionView 下,不是吗?
  • 不,UICollectionView 有这个开箱即用的委托方法 didSelectItemAtIndexPath。
  • 感谢您的帮助。现在玩 UICollectionView。更多问题来了:)
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多