1

我有一条倒置的抛物线,我需要有一个穿过抛物线路径的视图。视图应该沿着抛物线的路径稍微旋转和平移。

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

这是我想用抛物线视图实现的简要描述

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

这是一个粗略的草图哦,路径和视图的样子

在此处输入图像描述

而且我希望遍历路径的视图的旋转和平移同时发生

如何才能做到这一点?

谢谢!

4

1 回答 1

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];
于 2013-08-18T17:53:16.063 回答