CALayer - 从视图中删除

时间:2014-07-29 11:20:07

标签: ios objective-c core-animation calayer caanimation

我正在添加CAShapeLayer一些CABasicAnimation。我希望能够删除图层并再次绘制它,但我无法成功。

- (void)drawRect:(CGRect)rect {
    [self drawLayer];
}

- (void)drawLayer {
    if (_alayer && _layer.superlayer) {
        [_alayer removeFromSuperlayer];
        _alayer = nil;
    }

    _alayer = [[CAShapeLayer alloc] init];
    _alayer.path = [self myPath].CGPath;
    _alayer.strokeColor = [UIColor redColor].CGColor;
    _alayer.fillColor = [UIColor clearColor].CGColor;
    _alayer.lineWidth = 2.f;
    _alayer.strokeStart = 0.f;
    _alayer.strokeEnd = 1.f;
    [self.layer addSublayer:_alayer];

    // animate
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    animation.duration = 2.f;
    animation.fromValue = @0.f;
    animation.toValue = @1.f;
    [_alayer addAnimation:animateStrokeEnd forKey:@"strokeEndAnimation"];
}

}

然而,在调用[self setNeedsDisplay];后,即使它在drawLayer方法中的断点处停止,片刻也不会消失并再次激活。 alayer被声明为nonatomic, strong属性。我做错了什么?

2 个答案:

答案 0 :(得分:1)

你不应该叫[self drawLayer]; fromm drawRect:因为它是定期调用的。 使用其他viewDidLoad或从其他方法调用

编辑:

drawRect:应该仅用于绘图,我不知道如果你从那里添加动画它是否会起作用。

如果你想让它消失并出现,你应该尝试使用[self performSelector:withObject:afterDelay:]来添加延迟。

我认为更改隐藏或不透明度应该足够了,您只需要删除AllAnimations以确保不再有动画附加到该图层。

但是我认为你应该尝试其他方式而不是从drawRect调用drawLayer:因为我不管它是不是很好的做法。

答案 1 :(得分:0)

UIView默认拥有自己的属性layer。请尝试将变量名称更改为shapeLayer或其他名称。