gpt4 book ai didi

ios - 动画一个 CAShapeLayer 来绘制一个进度圈

转载 作者:技术小花猫 更新时间:2023-10-29 10:38:08 31 4
gpt4 key购买 nike

我正在尝试画一个圆圈来指示进度。进度更新可能会很快到来,我想动画化圆圈的变化。

我试过用下面的方法来做这个,但似乎没有任何效果。这可能吗?

- (id)initWithFrame:(CGRect)frame strokeWidth:(CGFloat)strokeWidth insets:(UIEdgeInsets)insets
{
if (self = [super initWithFrame:frame])
{

self.strokeWidth = strokeWidth;

CGPoint arcCenter = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
CGFloat radius = CGRectGetMidX(self.bounds) - insets.top - insets.bottom;

self.circlePath = [UIBezierPath bezierPathWithArcCenter:arcCenter
radius:radius
startAngle:M_PI
endAngle:-M_PI
clockwise:YES];
[self addLayer];
}
return self;
}


- (void)setProgress:(double)progress {
_progress = progress;
[self updateAnimations];
}

- (void)addLayer {

CAShapeLayer *progressLayer = [CAShapeLayer layer];
progressLayer.path = self.circlePath.CGPath;
progressLayer.strokeColor = [[UIColor whiteColor] CGColor];
progressLayer.fillColor = [[UIColor clearColor] CGColor];
progressLayer.lineWidth = self.strokeWidth;
progressLayer.strokeStart = 10.0f;
progressLayer.strokeEnd = 40.0f;

[self.layer addSublayer:progressLayer];
self.currentProgressLayer = progressLayer;

}

- (void)updateAnimations{

self.currentProgressLayer.strokeEnd = self.progress;
[self.currentProgressLayer didChangeValueForKey:@"endValue"];
}

目前这段代码甚至不画圆,但是移除 progressLayer 的 strokeStartstrokeEnd 将画出完整的圆。

如何让它从某个点开始并根据我设置的 progress 属性开始绘制圆?

最佳答案

我想通了。 strokeStartstrokeEnd 的值是从 0.0 到 1.0,所以我给它的值太高了。

所以,我刚刚将我的设置更新为:

- (void)setProgress:(double)progress {
_progress = progress * 0.00460;
[self updateAnimations];
}

关于ios - 动画一个 CAShapeLayer 来绘制一个进度圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21872610/

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