是否有一种简单的方法让动画超越其目标然后再回来?

时间:2011-10-07 19:01:03

标签: iphone objective-c ios ipad

是否有一种简单的方法让动画超越其目标然后再回来?

所以,我想说我想将一个圆圈从50%缩放到110%然后再回到100%,创造出几乎卡通效果。

我认为Flash或某些jQuery插件具有内置的缓动选项。 iOS有类似的东西,还是需要手动完成?

3 个答案:

答案 0 :(得分:4)

您无需手动执行此操作。您可以使用UIView动画方法几乎自动完成。

您可以将目标大小设置为110%,并将动画设置为反向和“重复”。在这种情况下,您将重复计数设置为0.58。也就是说,完成一个完整的后退和后退循环的一半,然后是其中的1/6。

这并不是全部。如果您这样做,在动画完成后,它将快速恢复到110%。因此,您需要将其设置回100%以使其保持在目标位置。

像这样:

// make it 50% size initially; maybe you already did that
circleView.transform = CGAffineTransformMakeScale(0.5,0.5);

[UIView animateWithDuration:1.0 / 0.58 // actual duration 1.0s
        animations:^{
            [UIView setAnimationRepeatCount:0.58];
            [UIView setAnimationRepeatAutoreverses:YES];
            circleView.transform = CGAffineTransformMakeScale(1.1,1.1);
        }
        completion:^(BOOL finished){
            circleView.transform = CGAffineTransformIdentity;
        }
]

答案 1 :(得分:3)

你必须手动完成。看看CAKeyframeAnimation。您可以指定要在动画中的不同点使用的不同值。通过设置timingFunctions属性来支持缓动。最难的部分是找出正确的值来获得你想要的效果。

答案 2 :(得分:0)

这只是两个动画 - 当第一个完成时,在一个块中开始第二个动画。缓动选项与它们加速/减速到动画的方式有关。

这是基本的想法

http://objcolumnist.com/2010/09/19/core-animation-using-blocks/

在您的代码中,您可能希望在完成块中启动下一个动画。