iOS 6视图层次结构的噩梦

时间:2012-09-21 21:33:45

标签: iphone uiview calayer ios6 drawrect

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

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

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

第4个消失的子视图应该是一个静态图像,它会闪烁并且没有可辨别的图案。

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


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

  1. 我的层次结构包含2个基本CALayer,没问题。
  2. 上面是一个非常大的自定义UIView(使用drawRect)和一个 大的UIImageVIew一起眨眼,总是在底部 一个旋转到某些位置。只有最底层的一个 转动。
  3. 上面是一个不会闪烁的自定义文本绘图UIView。
  4. 上面是一个小的红色图钉UIImageView,闪烁着 与上述2个观点完全相同。这是一种香草 的UIImageView;没有变换或子类或自定义绘图代码!和 但它仍然有同样的眨眼。
  5. 上面是一个看似无用的UIButton。
  6. 上面是一个UIImageView,它是一个闪烁的小图形 并且不断地与基于旋转的眨眼无关 其他3个“链接”层(我说链接因为他们喜欢消失 所有在一起)。

2 个答案:

答案 0 :(得分:3)

(这不是一个真正的答案,这是对The Rat答案的回复,但我还没有评论的声誉点)

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

答案 1 :(得分:2)

尝试手动设置视图图层z-property以确保您需要层次结构。