gpt4 book ai didi

ios - CALayer - 从 View 中移除

转载 作者:行者123 更新时间:2023-11-29 02:46:49 25 4
gpt4 key购买 nike

我正在添加 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 被声明为非原子、强 属性。我做错了什么?

最佳答案

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

编辑:

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

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

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

但是我认为除了从 drawRect: 调用 drawLayer 之外,您还应该尝试其他方法,因为无论如何我都不认为它是好的做法。

关于ios - CALayer - 从 View 中移除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com