如何在iPhone中动态加速动画

时间:2009-12-14 12:15:28

标签: iphone animation

我是iPhone中目标c编码的新手。我使用下面的代码动画图像40秒

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:40.0];
object.transform = CGAffineTransformMakeRotation(1.57);
[UIView commitAnimations];

我需要在10秒后加速动画。即动画应该使用上述值10秒,之后动画速度应该增加。

3 个答案:

答案 0 :(得分:2)

您将无法使用

执行此操作
[UIView beginAnimations:nil context:nil];

构造。看看核心动画框架:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1

如果我没记错的话,你想要做的是一系列Keyed Animations

答案 1 :(得分:0)

试试[UIView setAnimationCurve:]UIViewAnimationCurveEaseIn可以为你做。

如果你真的需要精确控制 - “x速度10秒,然后y速度30秒” - 最简单的方法可能是两个动画,第二个在第一个完成后立即开始。设置委托以在第一个动画完成后获得回调,并且可以立即开始第二个动画。 (我之前用过这个来实现一个“反弹”,其中一个视图动画,然后向下。)可能比尝试做一个完整的关键帧动画更容易。

答案 2 :(得分:0)

您需要在视图图层上使用Core Animation,而不是使用UIView动画代理。 CAKeyframeAnimation将使您能够为动画创建关键帧,并使您能够指定关键时间(CAKeyframeAnimation类中的keyTimes属性),以确定关键帧之间应花费的时间。

技巧是你的第一个关键帧不是结束变换,而是变换的一些中间值。您的最终关键帧将具有结束变换。您可以指定下一个关键帧开始时的关键时间。如果您的总持续时间为40秒,并且您想要在动画中10秒内进行第一次速度更改,则将该更改指定为第二个关键帧值,并指定0.25作为关键时间,假设您希望它需要四分之一的时间完整的持续时间。

来自文档:

  

keyTimes

     

NSNumber对象的可选数组   定义每个的持续时间   关键帧段。

     

@property(copy)NSArray * keyTimes

     

讨论

     

数组中的每个值都是浮点数   点数介于0.0和1.0之间   对应于中的一个元素   值数组。中的每个元素   keyTimes数组定义了持续时间   相应的关键帧值为   总持续时间的一小部分   动画。每个元素值必须是   大于或等于   以前的价值。

     

keyTimes中的适当值   数组取决于   calculationMode属性。

     

如果calculateMode设置为   kCAAnimationLinear,第一个值   数组必须是0.0,最后一个   值必须为1.0。价值观是   在指定之间插值   keytimes。

     

如果calculateMode设置为   kCAAnimationDiscrete,第一个值   在数组中必须是0.0。

     

如果calculateMode设置为   kCAAnimationPaced,keyTimes数组   被忽略了。

     

如果是keyTimes数组中的值   是无效的或不适合的   calculateMode,keyTimes数组是   忽略。

最好的问候。