【发布时间】:2014-02-06 12:26:01
【问题描述】:
我关于 StackOverflow 的第一个问题。所以感觉有点害羞......
我已经在 curstom 控件上工作和调整了几个星期了。它使用 ±6 个子类 CALayers 来制作一些精美的动画,以提供最佳的用户反馈。此外,还有 2 个动画 UIView 在用户交互期间添加了一些繁重的动画和重绘。
我设法在 iPhone 5S 上获得了高达 +50fps 的响应速度和性能。但是在 iPhone 4 上,它真的让我哭了:8 ~ 15fps。我试图找出导致这种糟糕表现的原因,但直到现在我才发现除了我可能希望从 Core Animation 中获得很多东西。
在所有 CALayers 上使用 layer.drawsAsynchronously = YES; 可以大大提高响应速度。而且我还去掉了所有不必要的动画(包括隐式动画)。但这仍然不够。 iPhone 4 的性能仍然不是我想要的。
当我切换到 layer.opaque = YES; 时,我注意到很多改进;但是由于我的界面设计,这确实不是一个选项。
你们有什么可以建议研究的吗?是否有任何其他“神奇”属性,例如我可能想尝试或研究的 .drawsAsynchronously?
对于如何调试/分析性能,您有什么可以建议的资源吗?
如有任何帮助,我们将不胜感激。提前致谢!
【问题讨论】:
-
你能发布一些代码来展示你想要做什么吗?
-
不幸的是,这不仅仅是一小段代码,而是多个 CALayer 子类和视图。最大的问题可能是(多个)BezierPaths 和 Gradients 是基于手势计算的。
-
我注意到在 iPhone4 上性能下降很多的一件事是透明度。使用不透明的颜色作为背景有很大帮助。
-
是的,我注意到了相同的 manecosta,但不幸的是,设计不允许我使用不透明的背景。 (感谢 iOS7 风格的模糊背景和半透明覆盖。)
标签: ios objective-c animation calayer drawrect