Ich versuche einen Kreis zu zeichnen, der den Fortschritt anzeigt. Die Fortschrittsaktualisierungen könnten schnell kommen und ich möchte die Änderungen am Kreis animieren.Animiere einen CAShapeLayer, um einen Fortschrittskreis zu zeichnen
Ich habe versucht, dies mit den folgenden Methoden zu tun, aber nichts scheint zu funktionieren. Ist das möglich?
- (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"];
}
Derzeit dieser Code nicht einmal den Kreis nicht ziehen, aber der strokeStart
und strokeEnd
wird zieht den Kreis des progressLayer entfernen.
Wie kann ich es an einem bestimmten Punkt beginnen und beginnen, den Kreis basierend auf meiner Einstellung progress
Eigenschaft zu zeichnen?
Ich möchte keinen Code von Drittanbietern verwenden. Ich möchte verstehen, wie ich es selbst mache. –
"Ich möchte keinen Code von Drittanbietern verwenden. Ich möchte es selbst verstehen." +1. Ich fühle das gleiche. – Unheilig