如何观察倒置抛物线的路径?

时间:2013-08-18 15:09:57

标签: iphone ios objective-c core-graphics core-animation

我有一个倒置的抛物线,我需要在抛物线的路径上移动一个视图。视图应该稍微旋转并沿着抛物线的路径平移。

我做了一些研究,发现BezierPath(带控制点的四边形曲线)可用于铺设抛物线的路径,然后我们可以使用CAKeyFramAnimation沿路径移动物体。沿着路径动画视图对象。抛物线是什么让我感到困惑。 如何在抛物线内不断更改对象的起点并保留最新的视图状态

以下是我想用抛物线中的视图实现的内容的简要说明

视图从抛物线中的特定点开始,然后遍历抛物线直到指定的终点。 如何找出抛物线内的终点? 一旦视图到达其终点。对于下一次遍历,它可以从该点开始,然后移动到抛物线内的任何其他点。这将根据下一个终点连续发生。

这是一个粗略的草图哦路径和视图如何看起来像

enter image description here

此外,我希望遍历路径的视图的旋转和平移同时发生

如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

  • 使用UIBezierPath绘制抛物线并将其转换为CGPath或创建CGPath。
  • 使用CAKeyFrameAnimation移动UIView的位置。

请查看以下源代码,

绘制抛物线

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,NULL,50.0,120.0);

CGPathAddCurveToPoint(path,NULL,50.0,275.0,
                      150.0,275.0,
                      150.0,120.0);
CGPathAddCurveToPoint(path,NULL,150.0,275.0,
                      250.0,275.0,
                      250.0,120.0);    
CGPathAddCurveToPoint(path,NULL,250.0,275.0,
                      350.0,275.0,
                      350.0,120.0);    
CGPathAddCurveToPoint(path,NULL,350.0,275.0,
                      450.0,275.0,
                      450.0,120.0);

路径上的CAKeyFrameAnimation。

CAKeyframeAnimation* AniLoc = [CAKeyframeAnimation animationWithKeyPath:@"position"]; // notice key change

// rest is the same
AniLoc.path = thePath;
AniLoc.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
AniLoc.keyTimes= [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f],
                  [NSNumber numberWithFloat:0.3f],
                  [NSNumber numberWithFloat:1.0f],nil];
AniLoc.duration = 2.0;

CFRelease(thePath);

[self.logo.layer addAnimation:AniLoc forKey:nil];