2012-09-21 70 views
5

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

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

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

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

我很想知道如何调试这个问题。这不是内存警告,执行额外的[setNeedsToDisplay]似乎没有效果。我开始认为苹果公司在iOS6中打破了一些东西,但我找不到任何人在讨论这些问题。


这里是主视图中的子视图和CALayers的层次结构的细分:

  1. 我的层次结构包含2个基地CALayers是罚款。
  2. 上面是一个非常大的自定义UIView(使用drawRect)和一个闪烁在一起的大型UIImageVIew,当底部 被旋转到某些位置时总是闪烁。只有最下面的一个正在旋转 。
  3. 上面是一个不闪烁的自定义文本绘图UIView。
  4. 上面是一个小的红色图钉UIImageView,它在 处闪烁,与上述2个视图完全相同。这是一个香草 UIImageView;没有转换或子类或自定义绘图代码!而且它仍然具有相同的闪烁。
  5. 在上面是一个似乎无时无刻不在工作的无形UIButton。
  6. 上面是一个UIImageView那就是闪烁关闭 和不断的小图形,无关(我说联系的,因为他们喜欢消失 一起)的 其他3“链接”层的基于旋转的闪烁。
+2

您是否尝试通过覆盖'isHidden','alpha'和layers方法改变命令的setter来添加一些日志消息?苹果对UIKit做了一些改变,这是真的,但这并不意味着你不是那个对这个问题负责的人。就像他们在'UITouch.h'上有警告说'任何UIKit类的实例变量都应该被认为是私有的......'并且猜测是什么,这些变量在iOs6上不再公开。 –

+0

我做了你的建议,并增加了setHidden覆盖:和setAlpha:在我的UIView子类有问题,并设置每个断点 - 他们从来没有被击中。不知道你对UIKit的改变意味着什么。 – avance

回答

2

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

+0

奇怪 - 我只在视图控制器的viewDidLoad方法中设置了一次视图层,并且他们开始正确。之后我没有设置z-postiion的明确性,或者以任何其他方式重新排列图层,所以它不应该有任何效果。尽管如此,我以极大的怀疑态度对你的建议进行了尝试,而且它也做到了!非常感谢! – avance

3

(这是不是一个真正的答案,这是与大鼠的回答答复,但我没有信誉点尚未就此发表评论)

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