我想繪製一個將用於指示進度的圓圈。進度更新可能會很快進行,並且我想要對圈子的更改進行動畫製作。使CAShapeLayer動畫繪製進度圈
我試着用下面的方法做這件事,但似乎沒有任何工作。這可能嗎?
- (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
屬性的圈子?
我不想使用第三方代碼。我想了解如何自己做。 –
「我不想使用第三方代碼,我想了解如何自己做。」 +1。我也是這麼感覺的。 – Unheilig