1

当我点击返回按钮时,我的一个视图冻结了几秒钟。

此外,当我点击此视图中的一个项目时,它会显示一个弹出窗口(自定义,而不是UIPopoverController)。这个弹出窗口看起来很快,但是当我“翻转”弹出窗口以查看它的背面时,会出现同样长的延迟。

我怀疑原因与视图的复杂性有关。正如您在下面的屏幕截图中看到的,它是一个集合视图,它有一个背景,并且一些子视图是旋转的(UIViewEdgeAntialiasing已打开)。

隐藏文本的白条不是应用程序的一部分

我使用 Instruments 中的 Time Profiler 来弄清楚发生了什么,但我被卡住了。

选择的时间段是当我按下后退按钮并发生冻结时

除非我取消选择“隐藏系统库”,否则我看不到任何有用的东西:

包括系统库

如果我查看方法名称,我认为它们与自动布局有关。这表明它试图在 segue 期间渲染一些东西。但是没有调用诸如之类的方法cellForItemAtIndexPath

这个应用程序还有一个 iPhone 版本,我根本没有遇到这个问题。它使用 tableview 而不是 collectionview。它也有背景和旋转的图片。

我使用模拟器进行了这些测量;在我的 iPad Mini 上情况更糟;动画开始前最多可能需要 20 秒。

更新-感谢您的回答,我尝试过的事情:

  • 关闭UIViewEdgeAntialiasing:对性能没有影响
4

2 回答 2

0

我认为这可能是由于 UIViewEdgeAntialiasing 标志。看起来你的主视图(有很多轻微旋转的图片)有很多抗锯齿边缘,因此对 iPad 的 GPU 非常不利。当您的弹出框旋转时(即背景再次显示时),绘图性能会减慢这一事实给出了一些可信度。

尝试将其关闭,看看性能是否有所提高。它看起来怎样?

于 2013-01-29T05:37:12.133 回答
0

旋转是这里的坏人。每个UICollectionViewCell都有一个UIView作为容器视图,其中是一个UIImageView. 我像这样旋转它:

container.transform = CGAffineTransformMakeRotation(M_PI * someRandomFloat);

删除那条线,一切都很活泼。

我在 iPhone 上使用了相同的技术,但显然这种旋转对性能的影响UITableViewCell比在UICollectionViewCell.

我尝试子类UICollectionViewFlowLayout化来旋转单元格本身而不是一个子视图。不幸的是,这会导致类似的性能问题。

于 2013-01-29T06:30:22.083 回答