UIView背景颜色如何影响iOS 5中的触摸操作

4

我有一个自定义视图,其中涉及触摸响应子类,这在iOS 4中是有效的。但是,在iOS 5上,如果将视图的背景颜色设置为clearColor,则这些触摸不会对视图底边沿沿进行响应。

我无法跟踪此问题,但是否有人知道iOS 5是否改变了视图根据透明背景响应触摸的方式?

除将背景颜色设置为任何不透明颜色如orangeColor以外,我不能对代码做出任何更改,然后视图才能完全响应。

请注意,此问题不会影响视图中其他位置的触摸;仅会影响视图底部边缘,即最后一个子视图下方的任何位置;当查看视图区域不存在内容时,透明背景被视为视图不存在。 更改颜色,视图即具有“内容”,触摸功能正常!

2个回答

14

不要使用[UIColor clearColor],尝试使用以下内容:

[view setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.1]];

注意: 当 alpha 值小于 0.1 时,UIView 不会响应触摸事件。使用 [UIColor clearColor] 会将 alpha 值设为 0.0,因此您无法获取触摸事件。通过上述方法,您可以在透明视图上接收触摸事件。


好的建议,但没有任何区别。 - johnbakers
当 alpha 值小于 0.1 时,触摸将被忽略。尝试将其设置为 0.1。如果这有效,我会编辑我的答案以反映这一点。 - skram
我的视图的alpha值为1.0;它是可见的,它的子视图也是可见的,但背景颜色是clearColor - johnbakers
2
似乎至少在iOS 8中,当alpha设置为0.01时,触摸事件会被触发,不再需要是0.1。 - Jordan H
1
问题是,即使alpha值为0.01,也会影响视图的外观,因此这不是一个好的解决方案。这到底是一种什么奇怪的优化?它似乎完全绕过了hitTest。我甚至尝试向透明子视图添加一个额外的子视图——它本身也是透明的——但hitTest仍然没有被触发。我猜它在执行任何命中检测之前读取渲染视图的实际像素值?为什么文档中没有描述这种行为呢?! - Archagon
显示剩余2条评论

5

如果有其他人遇到这个问题,并且想要比设置背景的部分透明度更好的解决方案,你可以将视图的opaque属性设置为NO,然后添加一个空的drawRect:方法。(在iOS8,beta 4上测试并工作正常。)


这是一个在大多数情况下都有效的绝佳解决方案。在我的iOS 7.1.2和iOS 8.1.3上都能正常工作。 - mattsven
这也会导致您的视图布局使用天文数字量的内存。 - Randy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接