UIView动画 VS 核心动画

3

我正在尝试对一个视图进行动画处理,使其在进入屏幕后反弹一次。

下面是我正在进行的滑动动画基本示例:

// The view is added with a rect making it off screen.
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.07];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[theView setFrame:CGRectMake(-5, 0, theView.frame.size.width, theView.frame.size.height)];
[UIView commitAnimations];

在didStopSelector中调用更多的动画来实现弹跳效果。问题是当有多个视图被动画化时,弹跳变得不流畅,不再弹跳。

在我开始研究如何在核心动画中实现这一点之前,(我知道这有点困难),我想知道使用核心动画是否真的比UIView动画有优势。如果没有,有什么方法可以提高性能吗?

1个回答

6

使用核心动画(基于图层)可以做很多高级的事情,比如三维动画(将视图嵌入到三维空间中)。

虽然 UiView 动画非常强大,但在您拥有大量动画之前不应成为性能瓶颈。我只在您的代码中看到一个例子,而且它的持续时间非常短。实际上,您几乎是立即设置了frame属性(70毫秒是14帧每秒)。您应该从开始、结束和整个距离的持续时间来考虑UIView动画——通常是0.2秒到几秒钟。它不是设计用来触发一个又一个微小的动画。


如果这些动画不是为此类效果设计的,那么我应该使用什么来实现弹跳效果?接下来会有几个极短的动画示例。 - Tom Irving
我不会轻易放弃UIView及其动画。只需考虑动画是否有意义。如果您在0.07秒内移动视图,则您的动画实际上并不是真正的动画——因为几乎没有起点和终点之间的位置可以插值。谁能跟得上那个动画呢?如果它是较长线性运动的一部分,则将整个过程作为一个动画进行动画处理。此外,还有一个repeatCount属性,可能对您的情况有用,也可能没有用。关键是,0.07秒对于任何动画来说都不是合理的时间跨度。也许发布整个序列很有用。 - Eiko
你说得对,0.07秒非常快,但使用非常快的动画和没有动画之间在视觉上肯定有区别。我现在的问题是,无论速度如何,同时进行3或4个非常快的动画是否会导致卡顿? - Tom Irving
可能会,也可能不会 - 我无法确定。同时进行几个动画应该不会有问题。每隔几毫秒产生新的动画可能会影响性能。您可以进行性能分析,查看是否有其他程序占用了CPU时间。如果主线程因为计算量过大而被阻塞,这可能是原因之一。另外,请务必在最慢的设备上进行测试,因为第一代iPod的性能与最新的iPad相差很大。 - Eiko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接