iOS核心动画加速

时间:2012-07-03 10:48:14

标签: objective-c ios ios5 core-animation transition

我正在尝试使用不同的动画替换另一个复杂视图,例如移动到左/右/上/下。第一个和第二个视图包含30-40个子视图(按钮)。我的代码是这样的:

oldView.alpha = 1;
newView.alpha = 0;
oldView.frame = CGRectMake(0, 0, width, height);
newView.frame = CGRectMake(0, -height, width, height);

// begin animation
// setting duration 0.3
// ...

oldView.alpha = 0;
newView.alpha = 1;
oldView.frame = CGRectMake(0, height, width, height);
newView.frame = CGRectMake(0, 0, width, height);

// commit animation
// ...

它适用于 iPhone模拟器 iPhone 4S ,但它落后于 iPhone 4 。滞后我的意思是12-15 FPS。

如何加快这个动画?

  • 我应该使用center属性而不是frame吗?
  • 我应该将我的观点呈现给UIImageView并为其制作动画吗?
  • 我应该在UIScrollView中布置我的观点并致电scrollRectToVisible:animated:吗?

请解释一下为什么我的动画代码这么慢?当我的两个视图包含10-20个按钮时 - 速度没有问题......

3 个答案:

答案 0 :(得分:1)

您需要发布更多代码,因为设置新框架不应该太过性能损失。但是,您可以对视图layerdrawRect:中的视图进行操作,这会使绘图和动画速度大幅下降。

例如:

myView.layer.shadowOffset = CGSizeMake(0.0, 10.0);
myView.layer.shadowRadius = 10;
myView.layer.shadowOpacity = 0.40;

为视图添加一个漂亮的投影会杀死动画。所以在这种情况下,我在动画时关闭阴影,完成后再次打开。

如果没有看到更多的代码,就无法说出问题所在。

修改

要加快渲染阴影,您可以将shouldRasterize属性设置为YES。这会强制图层创建阴影的位图,而不是尝试每帧重绘一次。

答案 1 :(得分:1)

请尝试以下方法之一:

  • 更改中心而非框架
  • 使用transform属性而不是frame。 oldView.transform = CGAffineTransformMakeTranslation(0, height);

答案 2 :(得分:0)

要添加,如果您使用显式动画但仍设置可设置动画的属性,则需要使用以下命令禁用隐式动画:

[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];