3
我試圖實現一個循環指標,隨着值的變化繪製動畫本身。我使用CAShapeLayer
來繪製動畫。到目前爲止,我每次都從頭開始吸收它,它按預期工作。現在我想讓它變得更加圓滑,並且將它拉到前面並根據新值是大於還是小於前一個值來「擦除」。我不知道如何實現刪除部分。有背景,所以我不能用白色在上面畫。這是一張圖片,可以更好地瞭解它的外觀。iOS的「擦除」與動畫CAShapeLayer繪圖
任何想法擦除部如何才能實現?對於類似的問題,這裏有一些解決方案,但那些不涉及動畫。
我用這個代碼繪製:
- (void)drawCircleAnimatedWithStartAngle:(CGFloat)startAngle
endAngle:(CGFloat)endAngle
color:(UIColor *)color
radius:(int)radius
lineWidth:(int)lineWidth {
CAShapeLayer *circle = [CAShapeLayer layer];
circle.name = @"circleLayer";
circle.path = ([UIBezierPath bezierPathWithArcCenter:CGPointMake(radius, radius) radius:radius-1 startAngle:startAngle endAngle:endAngle clockwise:YES].CGPath);
// Configure the apperence of the circle
circle.fillColor = [UIColor clearColor].CGColor;
circle.strokeColor = [UIColor colorWithRed:19.0/255 green:167.0/255 blue:191.0/255 alpha:1].CGColor;
circle.lineWidth = lineWidth;
// Add to parent layer
for (CALayer *layer in self.circleView.layer.sublayers) {
if ([layer.name isEqualToString:@"circleLayer"]) {
[layer removeFromSuperlayer];
break;
}
}
[self.circleView.layer addSublayer:circle];
circle.zPosition = 1;
// Configure animation
CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
drawAnimation.duration = 0.5;
drawAnimation.repeatCount = 1.0; // Animate only once..
// Animate from no part of the stroke being drawn to the entire stroke being drawn
drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
drawAnimation.toValue = [NSNumber numberWithFloat:1.0f];
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
// Add the animation to the circle
[circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"];
}
這是一個真棒解決方案,非常感謝你!表現層與這樣一個不錯的接觸!你救了我幾個小時的頭痛。所以乾淨和容易實施:) – NKorotkov 2014-11-06 09:10:25