2012-09-01 40 views
1

可能重复:
How can I animate the movement of a view or image along a curved path?的UIView动画不是线性

我有我要动画落叶(或几个)iOS应用程序。我在我的ImageView叶形象,我已经从文档想出了一个简单的动画:

[UIView animateWithDuration:4.0f 
          delay:0 
          options:UIViewAnimationTransitionFlipFromLeft 
          animations:^(void) 
          { 
           leaf1ImageView.frame = CGRectMake(320, 480, leaf1ImageView.frame.size.width,leaf1ImageView.frame.size.height); 
          } 
          completion:NULL]; 

这将使叶子从起始位置到右下角的一条直线。我该如何使它像一条抛物线或正弦曲线一样遵循路径或曲线,甚至可以旋转图像或视图?这会在动画块中完成吗?提前致谢!

回答

10

你可以用CAKeyframeAnimationCGPath来做到这一点。代码如下所示:

CAKeyframeAnimation *leafAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
leafAnimation.duration = 10.0; 
leafAnimation.path = /* your CGPathRef */; 
[leaf1ImageView.layer addAnimation:leafAnimation forKey:@"leafAnimation"]; 
+0

谢谢。这非常有帮助。 – chis54

+0

但是,如果我使用这个,我无法获得UIView动画的位置。 –

1

您正在寻找的东西是沿贝塞尔CGPath动画。欲了解更多详情,请参阅这个问题:

How can I animate the movement of a view or image along a curved path?

在代码中创建贝塞尔路径是比较硬,虽然,更容易的方法来创建贝塞尔曲线通过问题的答案在这里一起看动画:

Drawing bezier curves with my finger in iOS?

+0

链接的问题是关于绘图,但这个问题是关于动画的! – Felix

+1

您需要定义路径,然后才能在其上进行动画制作。仅用代码来定义Bezier路径几乎是不可能的,因此我链接到一个有用的资源。你会注意到我的答案是否解决动画问题。我同意,虽然我的回答很模糊,所以我添加了更多细节,另一个链接,并澄清了为什么我要添加绘图链接。 –

+0

是的,这是一个很好的参考,非常有用 – chis54