在UIBezierPath上移动多个UIImages均匀分布

时间:2012-04-05 07:03:12

标签: ios uiimage cakeyframeanimation uibezierpath

我正在尝试创建一个包含UIBezierPath的View。这现在有效。我想在UIBezierPath上放置UIImages(随机数量的图像),并根据请求将它们设置为下一步或上一步的动画。 所有图像一次全部朝向同一方向。

现在一直在查看所有文档,我无法理解。

所以希望有人可以帮助我或指出我正确的方向。

我认为你可以将它与一些追逐彼此的赛车进行比较,而不是互相追逐,而是从不同位置开始。我想通过触摸将它们移动到下一个点,因此不需要循环。

3 个答案:

答案 0 :(得分:2)

看看this tutorial。相关代码:

//create the image layer
CALayer *car = [CALayer layer];
car.bounds = CGRectMake(0, 0, 44.0, 20.0);
car.position = CGPointMake(160, 25);
car.contents = (id)([UIImage imageNamed:@"carmodel.png"].CGImage);
[self.view.layer addSublayer:car];

// animate it
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
anim.path = trackPath.CGPath;
anim.rotationMode = kCAAnimationRotateAuto;
anim.repeatCount = HUGE_VALF;
anim.duration = 8.0;
[car addAnimation:anim forKey:@"race"];

为所有图层(图像)添加此动画。

答案 1 :(得分:1)

您可能需要构建一个UIBezierPaths数组,每个段一个。跟踪每个UIImage的位置,并根据相应的段移动它。

这仅适用于您有不连续步骤的情况。遗憾的是,您无法使用values属性来限制移动到总路径的一部分......但是会被忽略。应该可以将CAMediaTimingFunction子类化,将其输出范围更改为0到1之外的其他值,但所有重要部分都是私有的。

答案 2 :(得分:0)

您可以使用strokeStart和strokeEnd属性来获取0到1之间的值,以使对象位于路径上。