我有以下设置:
- zPosition = 0 处的蓝色背景
- zPosition = 0 处的黄色按钮,具有打印“点击按钮”的操作
- 具有灰色背景和 zPosition = 1 处 0.8 alpha 的 UIView,带有 UITapGestureRecognizer,具有打印“点击灰色 View ”的操作
当我点击灰色区域时,会打印“点击灰色 View ”。 但是,如果我点击黄色按钮的位置,则会打印“点击按钮”。 我希望始终打印“点击灰色 View ”,因为该 View 位于按钮前面。 如何防止触发 View 后面的按钮?
我知道我可以将按钮设置为 .isEnabled = false 但这不是一个合适的解决方案,因为灰色背景是在父 View Controller 中创建的,我的所有 View 都继承了它。
我将灰色 View 设置为.isUserInteractionEnabled = true
(即使它是默认值),如下所示:In Stackoverflow
我想使用Apple Documentation但问题是有一个按钮和一个手势识别器,而不是多个手势识别器。
知道如何正确执行此操作吗?
最佳答案
@Daljeet 引导我找到解决方案。使用调试 View 层次结构,我意识到我的按钮位于 View 的顶部。我的错误是因为我没有意识到 UIView.layer.zPosition 和层次结构中 subview 的顺序之间的区别。一个 View 可以绘制在另一个 View 后面,但仍然位于 View 层次结构的前面。
解决方案是使用view.bringSubviewToFront(greyView)
请注意,如果您在调用最后一行代码后添加按钮,该按钮将被放置在 View 层次结构的顶部
关于ios - 使用 UITapGestureRecognizer 防止按钮在 View 后面时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60652705/