Objective c UIView动画与核心动画

Objective c UIView动画与核心动画,objective-c,iphone,cocoa-touch,uiview,core-animation,Objective C,Iphone,Cocoa Touch,Uiview,Core Animation,我正在尝试设置一个视图的动画,该视图滑动到视图中,并在它碰到屏幕一侧时反弹 我正在做的幻灯片的一个基本示例如下: // The view is added with a rect making it off screen. [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:0.07]; [UIView se

我正在尝试设置一个视图的动画,该视图滑动到视图中,并在它碰到屏幕一侧时反弹

我正在做的幻灯片的一个基本示例如下:

// 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动画是否真的有优势。如果没有,我可以做些什么来提高性能?

使用核心动画(基于层),您可以做很多高级的事情,比如3d动画(将视图嵌入3d空间)


不过UiView动画功能非常强大,在拥有足够的动画之前不应该成为性能瓶颈。我在您的代码中只看到一个示例,它的持续时间非常短。事实上,您几乎可以立即设置帧属性(70毫秒为14 fps)。您应该根据整个距离的开始、结束和持续时间(通常为0.2秒到几秒)来考虑UIView动画。它的设计目的不是一个接一个地发射微型动画

下面给出的例子中有一些非常短的动画,如果它们不是为这类事情设计的,我应该用什么来代替它们以产生类似反弹的效果呢?我不会过早放弃UIView和它们的动画。试想一下动画是否有意义。如果在0.07秒内移动视图,则动画无论如何都不是真正的动画,因为在开始和结束之间几乎没有要插值的位置。任何人都应该如何理解这种动画?如果它是较长线性运动的一部分,则将整个对象设置为一个动画。此外,还有一个repeatCount属性,它在您的场景中可能有用,也可能不有用。关键是,对于任何动画来说,0.07秒都不是合理的时间跨度。也许发布整个序列是有用的。你是对的,0.07秒很快,非常快,但是使用非常快的动画和完全没有动画在视觉上肯定有区别。我想我现在的问题是,无论速度如何,3到4个同时进行的非常快速的动画是否会导致抖动?可能会,也可能不会-我说不出来。两个平行动画应该不会有什么坏处。每隔几毫秒生成一次新动画可能会有问题。您可以随时分析并查看是否有任何其他内容占用您的CPU时间。如果主线程由于繁重的计算而阻塞,这可以解释这一点。另外,请确保在您要瞄准的最慢的设备上进行测试,因为第一代iPod的性能与最新的iPad大不相同。