如何在一段时间内为一条线设置动画?

时间:2015-03-22 03:51:57

标签: ios animation sprite-kit core-animation

我是开发iOS游戏的新程序员,并且想要编写动画线以引导用户将对象从A点拖到B点。所以我想要开始行(长度= 0 )在A点并将自身动画(比如说长度= 100像素)到B点。

我正在使用SKShapeNode,目前正在使用#an;它,我真的通过"更新"重新创建每一帧的线条。带有变量的方法,该变量依赖于当前时间线,使用下面的代码,直到达到所需的长度,直到线的长度稍长和长一些(注意该线是虚线的):

然而,我遇到了几个性能问题,当我修复时,会级联到更多。我需要放弃使对象的长度成为从&#34 ;-(void)更新过去的时间的函数:(CFTimeInterval)currentTime"。相反,我希望有一个方法可以被调用来动画这一行 - 我正在阅读并感觉这可以通过CoreAnimations(如CABasicAnimation here Ios drawing lines animated)实现,但我不确定如何完成这个。任何正确方向的帮助或指导都将非常感谢 - 谢谢。如果我能提供任何其他信息或解释,请告诉我!

-(void)drawLine : (CGFloat)ratio 
{


    CGPoint StartPoint = CGPointMake(0,0)
    CGPoint FinishPoint = CGPointMake(100,50);
    CGPoint AnimatedPoint = CGPointMake(FinishPoint.x*ratio +StartPoint.x*(1-ratio)+1, FinishPoint.y*ratio+StartPoint.y*(1-ratio)+1);

    CGFloat pattern[2];
    pattern[0] = self.size.height/30; //length of first pattern
    pattern[1] = self.size.height/30; //length of second pattern

    UIBezierPath *bezierPath=[UIBezierPath bezierPath];
    [bezierPath moveToPoint:StartPoint];
    [bezierPath addLineToPoint:AnimatedPoint];

    CGPathRef dashed =
    CGPathCreateCopyByDashingPath([bezierPath CGPath],
                                  NULL,
                                  0,
                                  pattern,
                                  2);
    lineDrawn.path = dashed; //this is of type SKShapeNode
    CGPathRelease(dashed);
}

1 个答案:

答案 0 :(得分:4)

是的,您可以(也可能应该)使用Core Animation而不是尝试在循环中绘制线条。

你会做的是创建一个CAShapeLayer。您将UIBezierPath中的CGPath安装为形状图层中的路径,并将形状图层添加为视图层次结构中某个视图图层的子图层。

然后你创建一个CABasicAnimation,它将形状图层的strokeEnd属性设置为0(结束=开始:没有绘制线条)到1.0(从开始到结束完全绘制线条。

这是一种非常常见的技术。你应该可以在" CAShapeLayer CABasicAnimation strokeEnd"上进行谷歌搜索。并找到或多或少做你需要做的事情的例子。如果你找不到让我知道的话,我会指出你正确的方向。