円弧の形をしたプログレスバーを作成します。プログレスバーの色は、値に応じて変更する必要があります。UIBezierPathで作成した円弧にグラデーションカラーを適用します。
UIBezierPath bezierPathWithArcCenter
を使用して円を作成しました。
- (void)viewDidLoad
{
[super viewDidLoad];
int radius = 100;
CAShapeLayer *arc = [CAShapeLayer layer];
arc.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:radius startAngle:60.0 endAngle:0.0 clockwise:YES].CGPath;
arc.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius,
CGRectGetMidY(self.view.frame)-radius);
arc.fillColor = [UIColor clearColor].CGColor;
arc.strokeColor = [UIColor purpleColor].CGColor;
arc.lineWidth = 15;
[self.view.layer addSublayer:arc];
CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
drawAnimation.duration = 5.0; // "animate over 10 seconds or so.."
drawAnimation.repeatCount = 1.0; // Animate only once..
drawAnimation.removedOnCompletion = NO; // Remain stroked after the animation..
drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
drawAnimation.toValue = [NSNumber numberWithFloat:10.0f];
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[arc addAnimation:drawAnimation forKey:@"drawCircleAnimation"];
}
結果は次のようになります:
私の質問がある:すなわち、値が< = 50%であれば色にグラデーションを適用するにはどうすれば、次のコードを使用しましたか?また、プログレスバーに接続するためにランダムなCGFloat番号を生成するUIButtonを作成しました。誰かがこれにどのように取り組むべきアイデアを持っていますか?
勾配は次のようになります:
任意の助けをいただければ幸いです!
ありがとうございました。
グラニット
ありがとうございます!それは魅力のように働いた:) – Granit
喜んでそれを助けた:) – djshiow
これはパスに沿って**描画するように見えるのではなく、むしろ、それはパスによって明らかにされる水平勾配を描くように思われる。それは理にかなっていますか?あなたは完全な円に従うためにどのように水平の勾配を「曲げる」のですか? – tracicot