使用 UIBezierPath 动画绘图弧
Animate drawing arc with UIBezierPath
我画了一个圆弧使用:
- (void)drawRect:(CGRect)rect {
UIBezierPath *stripePath = [UIBezierPath bezierPath];
[arcColor set];
[stripePath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:clockwise];
stripePath.lineWidth = arcWidth;
stripePath.lineCapStyle = kCGLineCapRound;
stripePath.lineJoinStyle = kCGLineCapRound;
[stripePath stroke];
}
现在我想通过角度为这个圆弧制作动画。
我正在尝试使用类似的东西:
angle = startAngle;
[UIView animateWithDuration:1
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
angle = endAngle;
[stripePath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:angle clockwise:clockwise];
[stripePath stroke];
}];
但是屏幕上没有显示动画。如何以角度作为变化变量为圆弧制作动画?谢谢
可能 MHRadialProgressView 将帮助您按特定角度制作弧形动画。
下面的代码实现了我的目标:
UIBezierPath *stripePath = [UIBezierPath bezierPath];
[arcColor set];
stripePath.lineWidth = arcWidth;
stripePath.lineCapStyle = kCGLineCapRound;
stripePath.lineJoinStyle = kCGLineCapRound;
[stripePath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:clockwise];
[_stripeLayer setPath:stripePath.CGPath];
[_stripeLayer setStrokeColor:arcColor.CGColor];
[_stripeLayer setFillColor:[UIColor clearColor].CGColor];
[_stripeLayer setLineWidth:arcWidth];
[_stripeLayer setStrokeStart:0.0];
[_stripeLayer setStrokeEnd:1.0];
[_stripeLayer setLineCap:kCALineCapRound];
[_stripeLayer setLineJoin:kCALineCapRound];
if ([_stripeLayer superlayer]) {
[_stripeLayer removeAllAnimations];
[_stripeLayer removeFromSuperlayer];
}
[self.layer addSublayer:_stripeLayer];
CABasicAnimation *animateStrokEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
animateStrokEnd.duration = 1;
animateStrokEnd.fromValue = [NSNumber numberWithFloat:0.0];
animateStrokEnd.toValue = [NSNumber numberWithFloat:1.0];
[_stripeLayer addAnimation:animateStrokEnd forKey:nil];
我画了一个圆弧使用:
- (void)drawRect:(CGRect)rect {
UIBezierPath *stripePath = [UIBezierPath bezierPath];
[arcColor set];
[stripePath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:clockwise];
stripePath.lineWidth = arcWidth;
stripePath.lineCapStyle = kCGLineCapRound;
stripePath.lineJoinStyle = kCGLineCapRound;
[stripePath stroke];
}
现在我想通过角度为这个圆弧制作动画。
我正在尝试使用类似的东西:
angle = startAngle;
[UIView animateWithDuration:1
delay:0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
angle = endAngle;
[stripePath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:angle clockwise:clockwise];
[stripePath stroke];
}];
但是屏幕上没有显示动画。如何以角度作为变化变量为圆弧制作动画?谢谢
可能 MHRadialProgressView 将帮助您按特定角度制作弧形动画。
下面的代码实现了我的目标:
UIBezierPath *stripePath = [UIBezierPath bezierPath];
[arcColor set];
stripePath.lineWidth = arcWidth;
stripePath.lineCapStyle = kCGLineCapRound;
stripePath.lineJoinStyle = kCGLineCapRound;
[stripePath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:clockwise];
[_stripeLayer setPath:stripePath.CGPath];
[_stripeLayer setStrokeColor:arcColor.CGColor];
[_stripeLayer setFillColor:[UIColor clearColor].CGColor];
[_stripeLayer setLineWidth:arcWidth];
[_stripeLayer setStrokeStart:0.0];
[_stripeLayer setStrokeEnd:1.0];
[_stripeLayer setLineCap:kCALineCapRound];
[_stripeLayer setLineJoin:kCALineCapRound];
if ([_stripeLayer superlayer]) {
[_stripeLayer removeAllAnimations];
[_stripeLayer removeFromSuperlayer];
}
[self.layer addSublayer:_stripeLayer];
CABasicAnimation *animateStrokEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
animateStrokEnd.duration = 1;
animateStrokEnd.fromValue = [NSNumber numberWithFloat:0.0];
animateStrokEnd.toValue = [NSNumber numberWithFloat:1.0];
[_stripeLayer addAnimation:animateStrokEnd forKey:nil];