当我点按后退按钮时,我的一个视图冻结了几秒钟。
此外,当我点按此视图中的某个项目时,它会显示一个弹出窗口(自定义,而不是UIPopoverController
)。这个弹出窗口看起来非常快,但是当我“翻转”弹出窗口以查看它的背面时,会发生同样的长时间延迟。
我怀疑原因与视图的复杂性有关。正如您在下面的屏幕截图中看到的那样,它是一个集合视图,它有一个背景,一些子视图被轮换(UIViewEdgeAntialiasing打开)。
我使用了仪器中的Time Profiler来弄清楚发生了什么,但我被卡住了。
除非我取消选择“隐藏系统库”,否则我看不到任何有用的东西:
如果我查看方法名称,我认为它们与自动布局有关。这表明它正试图在segue期间渲染一些东西。但是不会调用诸如cellForItemAtIndexPath
之类的方法。
还有这个应用程序的iPhone版本,我根本没有遇到这个问题。它使用tableview而不是collectionview。它还有背景和旋转图片。
我使用模拟器进行了这些测量;在我的iPad Mini上情况更糟;动画开始前最多可能需要20秒。
更新 - 感谢您的回答我尝试过的事情:
UIViewEdgeAntialiasing
:对效果没有影响答案 0 :(得分:0)
我认为这可能是由于UIViewEdgeAntialiasing标志造成的。看起来您的主视图(具有大量轻微旋转图片的视图)具有大量抗锯齿边缘,因此在iPad的GPU上非常沉重。当您的弹出窗口旋转时(即当背景再次显示时)绘图性能变慢的事实给出了一些信任。
尝试将其关闭,看看性能是否有所改善。它看起来怎么样?
答案 1 :(得分:0)
旋转是这里的坏人。每个UICollectionViewCell
都有一个UIView
作为容器视图,其中包含UIImageView
。我像这样旋转它:
container.transform = CGAffineTransformMakeRotation(M_PI * someRandomFloat);
删除该行,一切都很顺利。
我在iPhone上使用相同的技术,但显然这种轮换对UITableViewCell
的影响小于UICollectionViewCell
。
我尝试将UICollectionViewFlowLayout
子类化为旋转单元格而不是一个子视图。不幸的是,这会导致类似的性能问题。