在隐藏的 UIView 中接收触摸事件?
Posted
技术标签:
【中文标题】在隐藏的 UIView 中接收触摸事件?【英文标题】:Receiving touch events in hidden UIView? 【发布时间】:2016-02-19 01:59:52 【问题描述】:是否有可能以某种方式接收和响应来自不可见 UIView 的触摸事件。我试过——以及从苹果文档中阅读——简单地设置“隐藏”是行不通的。我正在寻找一种替代方法来达到同样的效果。
隐藏的视图从它的窗口中消失并且不接收输入事件。但是,它仍保留在其父视图的子视图列表中,并像往常一样参与自动调整大小。隐藏带有子视图的视图具有隐藏这些子视图及其可能具有的任何视图后代的效果。这种效果是隐含的,不会改变接收者后代的隐藏状态。
【问题讨论】:
您可以使用hit-test munging 来做到这一点。但是你为什么想要?整个想法毫无意义。如果用户看不到视图,则用户无法触摸该视图。这就是这个规则的原因。 @matt 我们正在将 UIView 渲染为纹理并在 OpenGL 中的四边形上显示它。但是我们仍然希望 UIView 响应输入来控制视图。 【参考方案1】:如果视图已将 userInteractionEnabled 设置为 YES,则它在隐藏时将是可触摸的。尝试以 UIButton 为例。
【讨论】:
【参考方案2】:使其透明,而不是隐藏(alpha 设置为 0)。如果这不起作用,请将其设置为几乎透明(alpha 设置为 0.1)。
【讨论】:
不幸的是,更改 alpha 会影响渲染为纹理的图像,并将其显示为透明。 渲染后执行此操作。 或者只是制作一个大小和位置相同的不同 UIView 来作为命中测试器。让那个透明的。 alpha 切换很聪明,几乎可以工作,不幸的是,将 alpha 减小得太低会自动禁用输入响应,再高一点,图层仍然可见。 首先,设置 alpha = 1 相当于完全不透明。其次,alpha 为 0 的视图不接收触摸事件。这个答案在所有方面都是完全错误的。以上是关于在隐藏的 UIView 中接收触摸事件?的主要内容,如果未能解决你的问题,请参考以下文章
以 UIScrollView 作为子类的 UIView 不接收触摸事件