gpt4 book ai didi

ios - 如何在持续时间内为一条线设置动画?

转载 作者:行者123 更新时间:2023-11-28 18:58:24 25 4
gpt4 key购买 nike

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

我正在使用 SKShapeNode,目前要对其进行“动画处理”,我实际上是通过“更新”方法在每一帧中重新创建线条,并使用一个依赖于 currentTime 的变量来使线条变得稍长一些,直到它到达使用以下代码所需的长度(注意该行是虚线):

但是,我遇到了几个性能问题,当我修复这些问题时,会引发更多问题。我需要避免让对象的长度成为从“-(void)update:(CFTimeInterval)currentTime”开始耗时的函数。相反,我想要一种可以调用的方法来为这条线设置动画——我正在阅读并觉得这可能可以通过 CoreAnimations 实现(比如这里的 CABasicAnimation 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);
}

最佳答案

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

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

然后,您将创建一个 CABasicAnimation,它将使形状图层的 strokeEnd 属性从 0(结束 = 开始:未绘制线条)到 1.0(从头到尾完全绘制线条)进行动画处理。

这是一种很常见的技术。您应该能够在“CAShapeLayer CABasicAnimation strokeEnd”上进行谷歌搜索,并找到或多或少完成您需要做的事情的示例。如果找不到,请告诉我,我会为您指明正确的方向。

关于ios - 如何在持续时间内为一条线设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29190783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com