Objective c 什么';设置线条动画的最简单方法是什么?
我正在创建一个应用程序,它涉及到随着时间的推移在工作区内设置线条动画。我目前的做法是在Objective c 什么';设置线条动画的最简单方法是什么?,objective-c,ios,ipad,animation,core-animation,Objective C,Ios,Ipad,Animation,Core Animation,我正在创建一个应用程序,它涉及到随着时间的推移在工作区内设置线条动画。我目前的做法是在drawRect中使用类似的代码: CGContextSetStrokeColor(context, black); CGContextBeginPath(context); CGContextMoveToPoint(context, startPoint.x, startPoint.y); CGContextAddLineToPoint(context, finalPoint.x, finalPoint.y)
drawRect
中使用类似的代码:
CGContextSetStrokeColor(context, black);
CGContextBeginPath(context);
CGContextMoveToPoint(context, startPoint.x, startPoint.y);
CGContextAddLineToPoint(context, finalPoint.x, finalPoint.y);
CGContextStrokePath(context);
…然后将计时器设置为每0.05秒运行一次,以更新finalPoint
并调用setNeedsDisplay
我发现这种方法(当有5条线同时移动时)会严重减慢应用程序的速度,即使刷新频率如此之高,仍然显得不稳定
必须有更好的方法在动画线条中执行这一非常简单的线条绘制,也就是说,我希望线条从x1,y1开始,在给定的时间长度内延伸到x2,y2。我的选择是什么?我需要让它运行得更快,我想摆脱这个笨重的计时器
谢谢 使用CAShapeLayers,以及CATTransaction和Cabasicanization的组合 可以将给定路径添加到shapeLayer,并让它进行渲染 CAShapeLayer对象有两个属性,分别称为
strokeStart
和strokeEnd
,它们定义了线条末端沿路径的渲染位置。strokeStart
的默认值为0.0,strokeEnd
的默认值为1.0
如果将路径设置为strokeEnd
最初从0.0开始,则不会看到任何行
然后,您可以从0.0到1.0为strokeEnd
属性设置动画,您将看到线条变长
要更改CAShapeLayer的隐式0.25s默认动画计时,可以向类中添加函数,如下所示:
-(void)animateStrokeEnd:(CGFloat)_strokeEnd {
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
animation.duration = 2.0f; //or however long you want it to happen
animation.fromValue = [NSNumber numberWithFloat:self.strokeEnd]; // from the current strokeEnd value
animation.toValue = [NSNumber numberWithFloat:_strokeEnd]; //to the end of the path
[CATransaction setCompletionBlock:^{ self.strokeEnd = _strokeEnd }];
[self addAnimation:animation forKey:@"animateStrokeEnd"];
[CATransaction commit];
}
您可以将0.0f到1.0f之间的任何值作为\u strokeEnd
的值进行传递
setCompletionBlock:
确保在动画完成后显式设置要传递的值