我是开发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);
}
答案 0 :(得分:4)
是的,您可以(也可能应该)使用Core Animation而不是尝试在循环中绘制线条。
你会做的是创建一个CAShapeLayer。您将UIBezierPath中的CGPath安装为形状图层中的路径,并将形状图层添加为视图层次结构中某个视图图层的子图层。
然后你创建一个CABasicAnimation,它将形状图层的strokeEnd属性设置为0(结束=开始:没有绘制线条)到1.0(从开始到结束完全绘制线条。
这是一种非常常见的技术。你应该可以在" CAShapeLayer CABasicAnimation strokeEnd"上进行谷歌搜索。并找到或多或少做你需要做的事情的例子。如果你找不到让我知道的话,我会指出你正确的方向。