【问题标题】:UIView background color affects touches in iOS 5UIView 背景颜色影响 iOS 5 中的触摸
【发布时间】:2012-06-16 05:44:35
【问题描述】:

我有一个在 iOS 4 中工作的带有子类触摸响应的自定义视图。在 iOS 5 上,当沿着视图的底部边缘触摸时,这些触摸根本不会响应,如果视图的背景颜色设置为clearColor

我无法追踪到这一点,但有谁知道 iOS 5 是否改变了视图根据透明背景响应触摸的方式?

除了将背景颜色设置为orangeColor 之类的任何不透明颜色之外,我无法对代码进行任何更改,并且视图会完全响应。

请注意,该问题不会影响视图中其他地方的触摸;仅沿底部边缘,添加到视图的最后一个子视图下方的任何位置;在查看没有内容的视图区域时,可能会为了触摸而将清晰的背景视为视图不存在。改变颜色,视图有“内容”并且触摸工作!

【问题讨论】:

    标签: iphone objective-c ipad uiview uikit


    【解决方案1】:

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

    【讨论】:

    • 这是一个很好的解决方案,适用于大多数场景。适用于 iOS 7.1.2 和 iOS 8.1.3。
    • 这也会导致您的视图布局使用天文数字的内存量。
    【解决方案2】:

    不要使用[UIColor clearColor],尝试使用这个:

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

    注意:当alpha 低于0.1 时,UIView 不会响应触摸事件。 [UIColor clearColor]alpha 设置为0.0,因此您不会收到触摸事件。按照上面的方法,就可以在透明视图上接收到触摸事件了。

    【讨论】:

    • 不错的建议,但没有区别
    • 当 alpha 值小于 0.1 时,触摸将被忽略。尝试将其设置为0.1。如果可行,我将编辑我的答案以反映这一点
    • 我的视图的 alpha 为 1.0;可见,其子视图可见,但背景颜色为clearColor
    • 似乎至少在 iOS 8 中触发触摸事件时 alpha 设置为 0.01,不再需要为 0.1。
    • 问题是,即使是 0.01 的 alpha 也会影响视图的外观,因此这不是一个好的解决方案。无论如何,这是什么奇怪的优化?它似乎完全绕过了 hitTest。我什至尝试向透明子视图添加一个额外的子视图——它本身也是透明的——并且即使在那时也没有触发 hitTest。我猜它是在执行任何命中检测之前读取渲染视图的实际像素值?为什么文档中没有描述这种行为?!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多