CABasicAnimationでアニメーションをする図の色を変更する
以下のリンクを参考にし、円グラフを作成してます。https://gist.github.com/glayash/38aa605f99a9666a925d
条件によってグラフの色を変えたいのですが、アニメーション中は変わりません。アニメーション時間に設定した時間が終わると、パッと変わります。一部コードを抜粋して以下に記しました。
ViewControllerによりparamが100以下のときグラフを赤くしようとしております。
ViewController.m
if( param < 100) {
[_graph setfillColor:[UIColor redColor]];
} else {
[_graph setfillColor:[UIColor blueColor]];
}
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"value"];
animation.duration = 5;
animation.repeatCount = 1;
animation.fromValue = [NSNumber numberWithFloat:0.0];
animation.toValue = [NSNumber numberWithFloat:per];
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = YES;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[_graph addAnimation:animation forKey:@"key"];入力
AnimatableGraph.h
@property (nonatomic) UIColor *fillColor;
AnimatableGraph.m
@implementation SKCircleGraphLayer{
CGFloat red,green,blue,alpha;
}
-(void)drawInContext:(CGContextRef)ctx{
fillColor getRed:&red green:&green blue:&blue alpha:&alpha];
NSLog(@"%f",red); //アニメーション中は0となり終了後1となる。
CGContextSaveGState(ctx);
CGFloat x = self.bounds.origin.x;
x += self.bounds.size.width/2;
CGFloat y = self.bounds.origin.y;
y += self.bounds.size.height/2;
CGContextSetLineWidth(ctx, 0);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, x, y, x-10, 0, M_PI*2, NO);
CGContextAddPath(ctx, path);
CGContextSetRGBFillColor(ctx,0.6, 0.6, 0.6,1.0); //gray
CGContextSetLineWidth(ctx, 0);
CGContextDrawPath(ctx, kCGPathFillStroke);
// 3時の方向が0度なので補正
double start = -45;
double aDegree = _degree - (180 - start);
CGMutablePathRef graph = CGPathCreateMutable();
CGPathAddArc(graph, nil, x, y,x-10,(M_PI * 2.0 * (start - 180) / 360),(M_PI * 2.0) * (aDegree / 360.0), false);
CGPathAddLineToPoint(graph, nil, x, y);
CGContextAddPath(ctx, graph);
CGContextSetRGBFillColor(ctx, red,green, blue,alpha);
CGContextDrawPath(ctx, kCGPathFillStroke);
CGContextRestoreGState(ctx);
}