【问题标题】:How to remove CALayer when done animating? [duplicate]完成动画后如何删除CALayer? [复制]
【发布时间】:2017-02-02 17:13:37
【问题描述】:

我有一个视图,其中我在 drawRect 方法中绘制了所有 CALayers。在方法内部,我开始动画,在完成块上,我从超层中删除层及其子层。但是,它不断被添加回我的动画中作为子层。如何防止这种情况发生?

- (void)drawRect:(CGRect)rect
{

...

[CATransaction begin];
    {
        [CATransaction setAnimationDuration: 5.0];//Dynamic Duration
        [CATransaction setCompletionBlock:^{
            [tutorialCircle removeFromSuperlayer];
            [strokePart removeFromSuperlayer];
        }];
...

for (NSUInteger i = 0; i < 3; i++)
        {
            strokePart = [[CAShapeLayer alloc] init];
            strokePart.fillColor = [[UIColor clearColor] CGColor];
            strokePart.frame = tutorialCircle.bounds;
            strokePart.path = tutorialCircle.path;
            strokePart.lineCap = tutorialCircle.lineCap;
            strokePart.lineWidth = tutorialCircle.lineWidth;
...

[tutorialCircle addSublayer: strokePart];

如何确保我的子图层及其子图层只显示一次动画然后永远消失?

【问题讨论】:

    标签: ios objective-c xcode


    【解决方案1】:

    由于某种原因,我不得不将两者的不透明度设置为 0 并移除它们。很奇怪。

    [CATransaction setCompletionBlock:^{
                [tutorialCircle removeFromSuperlayer];
                tutorialCircle.opacity = 0.0;
                strokePart.opacity = 0.0;
                [strokePart removeFromSuperlayer];
            }];
    

    【讨论】:

      猜你喜欢
      • 2013-07-15
      • 1970-01-01
      • 2020-05-11
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多