我遇到了一个非常奇怪的问题,我想知道是否有人可以在这里帮助我,因为我完全迷路了。
背景:我正在开发一个层次结构相对简单的应用程序。只有几个视图控制器,但有很多高分辨率图像。它们以UIScrollView
带有一些文本等的形式呈现。在纵向模式下对其进行测试时,滚动视图根本没有平滑滚动。似乎帧速率下降到大约 4-5 fps。首先,我认为这是因为高分辨率图像。
但后来我把 iPad 调到了横向模式,一切都运行得很顺利。由于我有一个单独的纵向和横向 xib 文件,我认为纵向 xib 中一定有问题。原来,没有。两者都有相同的 VC 类,因此使用相同的代码和两个 xib 几乎相同,除了视图的大小和位置。
为了缩小问题的范围,我使用 Instrument 的 TimeProfiler 来查看导致问题的原因。事实证明,TimeProfiler 显示了一些对[NSISEngine optimize]
(由 触发NSLayoutConstraint
)的调用。在纵向模式下,通话次数更多,而且通话时间更长。在树的下方,我看到在纵向模式下[NSISEngine optimize]
调用[NSISEngine fixupIntegralizationViolations]
,而在横向模式下却没有。
我什至从应用程序中删除了所有视图控制器,除了 rootVC 和 rootVC 提供的另一个。呈现的 vc 仅包含一些图像、按钮和一些动画。它只有一个 xib 用于两个方向,并且(与所有其他方向一样)使用自动布局进行布局。
布局在两个方向上都可以正常工作,并且没有歧义(据我所知。至少po [[UIWindow keyWindow] _autolayoutTrace]
没有显示任何内容)。
我附上了vc演示过程的TimeProfile截图。一张是纵向的,一张是横向的。如您所见,在横向调用[NSISEngine optimize]
只需要一毫秒,而在纵向调用则需要超过 3000 毫秒。
有谁可以告诉我这是为什么?或者也许知道我能做些什么来找出问题所在?
任何帮助将不胜感激!
谢谢
链接到更大版本的图像:链接