0

我正在尝试使用不同的动画将一个复杂视图替换为另一个复杂视图,例如移动到左/右/上/下。第一个和第二个视图包含 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 SimulatoriPhone 4S上运行良好,但在iPhone 4上运行滞后。延迟是指 12-15 FPS。

我怎样才能加快这个动画?

  • 我应该使用centerproperty 而不是frame
  • 我应该将我的观点渲染为UIImageView's 并为其设置动画吗?
  • 我应该布局我的视图UIScrollView并打电话scrollRectToVisible:animated:吗?

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

4

3 回答 3

1

尝试以下方法之一:

  • 改变中心而不是框架
  • 使用变换属性而不是框架。oldView.transform = CGAffineTransformMakeTranslation(0, height);
于 2012-07-03T11:20:20.773 回答
1

您将需要发布更多代码,因为设置新框架不应该对性能造成太大影响。但是,您可以对视图layer或在视图中做一些事情,drawRect:这会大大减慢绘图和动画的速度。

例如:

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

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

如果不查看更多代码,就不可能说出问题出在哪里。

编辑:

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

于 2012-07-03T10:56:40.443 回答
0

补充一点,如果您正在使用显式动画但仍设置动画属性,您将需要使用以下方法禁用隐式动画:

[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
于 2012-09-04T12:59:10.420 回答