【问题标题】:iOS 6 view hierarchy nightmareiOS 6 视图层次结构噩梦
【发布时间】:2012-09-21 21:33:44
【问题描述】:

我在应用商店中有一款应用评分接近 5 星,但是当 iOS 6 发布时,应用主视图层次结构中的一些视图开始闪烁。这发生在商店中的应用程序(我在 iOS6 发布时将其删除)以及模拟器中。

我花了大约 14 个小时,尝试了 100 件事情,在 Xcode 中调试它,但无法获得任何牵引力。子视图消失并重新出现,就像有一个小鬼随机地为它们中的每一个设置可见属性,最多每秒 10 次,在一切正常的较长时间之间。

主界面是一个用户可以旋转的表盘,我在图层上使用 3d 变换来旋转它。我发现的唯一模式是,当表盘旋转到某些离散位置时,4 个消失的子视图中的 3 个一起消失,就好像锁定为一个一样。

第 4 个消失的子视图应该是静态图像,它会闪烁,没有明显的图案。

我很想知道如何调试它的任何想法和提示。这不是内存警告,执行额外的 [setNeedsToDisplay] 似乎没有效果。我开始认为 Apple 在 iOS6 中破坏了某些东西,但我找不到其他人在谈论这些问题。


以下是主视图的子视图和 CALayers 层次结构的细分:

  1. 我的层次结构包含 2 个很好的基本 CALayers。
  2. 上面是一个非常大的自定义 UIView(使用 drawRect)和一个 大的 UIImageVIew 一起闪烁,总是,当底部 一个是旋转到某些位置。只有最底层的是 旋转。
  3. 上面是自定义文本绘制 UIView,不会闪烁。
  4. 上方是一个红色的小针图形 UIImageView,它在 与上述 2 个视图完全相同的时间。这是香草 UIImageView;没有转换或子类或自定义绘图代码!和 但它仍然闪烁。
  5. 上面是一个不可见的 UIButton,它似乎一直在工作。
  6. 上面是一个 UIImageView,它是一个闪烁的小图形 并且不断地,与基于旋转的闪烁无关 其他 3 个“链接”层(我说链接是因为它们喜欢消失 一起)。

【问题讨论】:

  • 您是否尝试通过覆盖 isHiddenalpha 的设置器和更改顺序的层方法来添加一些日志消息? Apple 对 UIKit 进行了一些更改,这是事实,但这并不意味着您不是该问题的负责人。就像他们在UITouch.h 收到警告说Instance variables of any UIKit class should be considered private... 一样,猜猜看,这些变量在 iOs6 上不再公开。
  • 我按照您的建议做了,并在我的 UIView 子类中添加了对 setHidden: 和 setAlpha: 的覆盖,这些子类有问题并在每个子类上设置了一个断点——它们从未被击中。不过,不确定您对 UIKit 更改的意思。

标签: iphone uiview calayer ios6 drawrect


【解决方案1】:

(这不是真正的答案,这是对老鼠答案的回复,但我还没有声望点可以评论)

是的,明确设置 zPositions 似乎可以解决它,是的,这很奇怪。我也遇到了这个问题,并在这里写了博客:iOS 6 Rendering Bug: 3D-Rotation Causes Layers to Render Without Respect for View Hierarchy。这似乎是 iOS 6 中引入的一个渲染错误。该博客有一个指向我向 Apple 提交的错误的 Open Radar 版本的链接,以及一个您可以运行以查看错误和 zPosition 修复的示例项目。

【讨论】:

    【解决方案2】:

    尝试手动设置视图层 z 属性以确保层次结构是您需要的。

    【讨论】:

    • 奇怪——我只设置了一次视图层,在视图控制器的 viewDidLoad 方法中,它们开始是正确的。之后我没有明确设置 z-postiion,或者以任何其他方式重新排列图层,所以它不应该有任何影响。尽管如此,我还是抱着极大的怀疑态度尝试了你的建议,它成功了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多