在核心动画中移除或隐藏图层时移除不透明度和时间间隔

Posted

技术标签:

【中文标题】在核心动画中移除或隐藏图层时移除不透明度和时间间隔【英文标题】:Removing the opacity and time interval when a layer is removed or hidden in Core Animation 【发布时间】:2012-07-07 17:51:51 【问题描述】:

似乎当我从CALayer 中删除动画或将其设置为隐藏时,图层在被删除之前会淡出大约半秒,而我希望它在我想要它的时候也停止。

点击CALayer 后它应该会立即停止,但似乎会在图层上应用淡出效果。动画垂直移动CALayer,当它被点击移除时,您几乎可以看到它逐渐消失。

我需要在点击它后立即将其移除的原因是 UIImageView 将其替换为它的位置并运行关键帧图像动画。

【问题讨论】:

【参考方案1】:

你可以通过disabling layer actions来控制这个自动动画:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
[aLayer removeFromSuperlayer];
[CATransaction commit];

【讨论】:

它似乎不起作用,我的动画是一个遵循路径的CAKeyFrameAnimation - 但我认为这应该不是问题吧? 我不确定为什么像您在其他答案中那样禁用这些操作与以我描述的方式禁用它们有什么不同。奇怪! 我也是这么想的,我也看了你发给我的代码和链接,以防它是错字什么的,但一切都好,其他人似乎使用相同的代码同样的问题,一定是我的某个地方出了问题【参考方案2】:

现在没关系,我认为最好的方法是有效地取消父层的action 属性。

parentLayer.actions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                            [NSNull null], @"onOrderIn",
                            [NSNull null], @"onOrderOut",
                            [NSNull null], @"sublayers",
                            [NSNull null], @"contents",
                            [NSNull null], @"bounds",
                            nil];

[childLayer removeFromSuperlayer];

就我而言,我只需要NSDict 中的“子层”数据:

parentLayer.actions = [[NSMutableDictionary alloc] initWithObjectsAndKeys: [NSNull null], @"sublayers",
                            nil];

[childLayer removeFromSuperlayer];

【讨论】:

以上是关于在核心动画中移除或隐藏图层时移除不透明度和时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

移除或隐藏 svg 元素

从控制中移除但在地图上保留图层

在框架外点击时移除视图

写一段代码在遍历 ArrayList 时移除一个元素?

当不透明度为 0% 时从元素中移除点击

UIView 在其图层动画后显示不正确