2012-07-20 30 views
4

我在视图之间创建了自己的过渡动画。我为两个属性(位置和变换)设置动画,以在视图之间提供类似立方体的过渡。该框架使用CABasicAnimation,而转换使用“2阶段”CAKeyframeAnimation。一切工作正常,除了一个小细节,我似乎无法弄清楚。在我的转换中,我在中间关键帧上应用CATransform3DScale以创建放大/缩小效果。这工作正常,除了动画看起来有点生涩。它以线性方式在关键帧之间进行动画处理,并且我想将其解决。现在CAKeyframeAnimation有一种方法可以使用calculationMode来实现,但它似乎不适用于转换。我尝试将其设置为kCAAnimationCubickCAAnimationCubicPaced,但没有任何效果。用于CATransform3D动画的CAKeyframeAnimation上的平滑动画

下面是动画一个视图的变换代码(一个类似的代码块动画其它视图):

CAKeyframeAnimation *aTransform = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
    CATransform3D transform1 = RotateOnX(toView, M_PI_4); 
    transform1 = CATransform3DScale(transform1, RotationalZoom, RotationalZoom, RotationalZoom); 
    [aTransform setValues:Array([NSValue valueWithCATransform3D:RotateOnX(toView, M_PI_2)], 
           [NSValue valueWithCATransform3D:transform1], 
           [NSValue valueWithCATransform3D:RotateOnX(toView, 0)])]; 
    [toView.layer addAnimation:aTransform forKey:@"transform"]; 

注:RotateOnX(UIView *, CGFloat)是用于返回一个视图的变换块由X上旋转所需的弧度。

正如你所看到的,我只对中间关键帧设置了缩放转换。此外,视图的旋转非常平滑,只是缩放似乎在改变方向时“猛拉”。

有没有人有关于如何平滑缩放/缩放的任何想法?

+0

添加多个关键帧? – 2012-07-20 21:46:35

回答

3

尝试timingFunctions属性。因为你有3个关键帧,则需要2定时功能:一个用于从关键帧0动画设置关键帧1,而另一个用于从关键帧1动画以关键帧2

aTransform.timingFunctions = [NSArray arrayWithObjects: 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInOut], 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInOut], 
    nil]; 
+0

对不起,我不清楚......我用一个“框架”来捕捉所有的边界,anchorPoint和位置。实际上,我确实只是通过修改锚点来动画化位置,以“移动”我的视图。我会更新我的问题以澄清。 – 2012-07-20 21:28:25

+0

我改变了我的答案。 – 2012-07-20 21:44:27

+0

哦,圣哇...我完全错过了,我在6个小时内至少看了10次这些课文......呃。它完美的作品。真的,谢谢你! – 2012-07-20 23:48:25