在uiview图层上移除或恢复CABasicAnimation

时间:2013-06-26 15:25:28

标签: iphone ios objective-c uiview cabasicanimation

我需要重绘多个绘图圆的动画,我使用此代码为绘图设置动画

CAShapeLayer *circle = [CAShapeLayer layer];
        // Make a circular shape
        circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius)
                                                 cornerRadius:radius].CGPath;
        // Center the shape in self.view
        circle.position = CGPointMake(CGRectGetMidX(_DrawingView.frame)-radius,
                                      CGRectGetMidY(_DrawingView.frame)-radius-0.66*radius);

        // Configure the apperence of the circle
        circle.fillColor = [UIColor clearColor].CGColor;
        circle.strokeColor = [UIColor redColor].CGColor;
        circle.lineWidth = 15;

        // Add to parent layer
        [_DrawingView.layer addSublayer:circle];

        // Configure animation
        CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        drawAnimation.duration            = 10.0; // "animate over 10 seconds or so.."
        drawAnimation.repeatCount         = 1.0;  // Animate only once..
        drawAnimation.removedOnCompletion = NO;   // Remain stroked after the animation..

        // 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];

        // Experiment with timing to get the appearence to look the way you want
        drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

        // Add the animation to the circle
        [circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"];

我需要删除动画再次重绘,我试过这个

[_DrawingView.layer removeAnimationForKey:@"drawCircleAnimation"];

但它不起作用,所以如何从图层中删除动画?

1 个答案:

答案 0 :(得分:1)

搞清楚了!

我添加了circle.name=@"circle"; 然后当按下按钮我检查图层名称并将其删除

for (CALayer *layer in _DrawingView.layer.sublayers) {
           if ([layer.name isEqualToString:@"circle"]) {
               [layer removeFromSuperlayer];
               break;
           }
       }