Cocoa Touch中的动画?

时间:2010-09-11 10:40:45

标签: cocoa-touch animation

过去我一直在使用UIViewAnimation进行简单的动画,现在我可以看到Apple不鼓励在+4.0中使用这个类。我开始研究CATransitions和-animation。它提供了一些更细粒度的控制,但在我有限的使用中看起来真的很臃肿。 当我试图掌握平台上的各种可能性时,我遇到了一个兔子洞,里面有很多关于Core Animation,Quartz和OPEN GLS的东西,但在动画上没有简单的东西,让我开始。

我需要“补间”位置,alpha,缩放和旋转,有时一次只能在几个UIViews上,并为animationDidStart和didStop设置一个委托钩子。 那里有没有好的Tween引擎? 处理过flash和Java之后,这真的是我想念的事情之一。

如果我使用CATransitions,似乎我一次只能动画一个属性,即alpha,如果我必须同时移动和旋转UIView,我将不得不为每个属性设置单独的动画。 如果我应该使用CATransition,有没有办法建立一个动画对象,一次动画几个属性?

如果有人能让我开始以动画的复杂性与所需代码量成比例的方式开始,我将非常感激:)提前感谢。

2 个答案:

答案 0 :(得分:5)

你过分思考这个。

虽然Apple确实不鼓励iOS 4中的beginAnimations:context:方法,但它们提供了一种非常好的新方法,比以前更容易实现。它仍然是UIView类的一部分,它只是使用了随更新提供的一个很棒的新功能:块。

事实上,Apple甚至鼓励使用基于块的动画。取自UIView类引用:

  

“不鼓励使用这种方法   iOS 4.0及更高版本。你应该使用   基于块的动画方法   代替“。

基于块的动画非常简单易用。它们采用以下形式:

[UIView animateWithDuration:5
   animations:^{
       self.yourView.frame = CGRectMake(100, 100, 100, 200);
       self.yourView.alpha = 0.3;
   }
   completion:^(BOOL finished){
       self.yourView.alpha = 1.0;
       [self.yourProperty doSomethingReallyCool];
   }
];

看起来很熟悉?它与beginAnimations:context:方法非常相似。小^ {}部分是块。块保持状态,因此它们可以很好地处理这种事情。有关块的更多信息,请查看

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html

确保查看位于here的UIView类引用。有许多新的基于块的动画方法。

此外,值得注意的是,该块仅限iOS 4。因此,提供了SDK 3或更低版本设备的备份代码。或者,继续使用beginAnimations:context:现在,但请注意它的日期已经编号。

答案 1 :(得分:0)

您可以设置应在[UIView beginAnimations:nil context:nil];方法中设置动画的属性,如:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0f];

view.alpha = 0.0f;
view.center = CGPointMake(34.0f,23.0f);
...

[UIView commitAnimations];