我正在尝试绘制一个用于表示进度的圆圈。进度更新可能会很快进行,我想对圆圈的更改设置动画。
我已尝试使用以下方法执行此操作,但似乎没有任何效果。这可能吗?
- (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的strokeStart
和strokeEnd
将绘制整个圆圈。
如何根据我设置progress
属性来开始绘制圆圈?
答案 0 :(得分:6)
我明白了。 strokeStart
和strokeEnd
值从0.0到1.0,因此我给出的值太高了。
所以,我刚刚将设置更新为:
- (void)setProgress:(double)progress {
_progress = progress * 0.00460;
[self updateAnimations];
}
答案 1 :(得分:1)
我对示例here的回答。通常,您应该将动画添加到 CAShapeLayer 。