从视图中删除所有子层

Bep*_*o66 47 objective-c calayer ios

在动画中,我在视图中添加了许多子图层,其中:

[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
Run Code Online (Sandbox Code Playgroud)

....

我想通过一个动作删除所有子图层.我已经尝试过这个类似问题的建议:

rootLayer.sublayers = nil;
Run Code Online (Sandbox Code Playgroud)

但它不起作用......

你可以帮帮我吗?比你!

Sve*_*sen 132

对象的sublayers属性CALayer返回数组的副本.设置它不是零没有关于子层.然而,这将做:

for (CALayer *layer in self.view.layer.sublayers) {
    [layer removeFromSuperlayer];
}
Run Code Online (Sandbox Code Playgroud)

或者,在斯威夫特

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
Run Code Online (Sandbox Code Playgroud)

  • 看来我错了.你_can_将`sublayers`设置为一个预先填充了`CALayer`对象的数组.不过,我的解决方案仍然是正确的.此oneliner也可能工作(未经测试):`[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]` (6认同)
  • 虽然CALayer的子图层属性具有"复制"属性,但此代码会导致多个子图层崩溃(在枚举时尝试改变数组).显式复制子图层数组修复了这个问题:for([rootLayer.sublayers copy]中的CALayer*sublayer){[sublayer removeFromSuperlayer]; } (5认同)

小智 20

这对我有用并修复了崩溃:

[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
Run Code Online (Sandbox Code Playgroud)

我用我的图像改变了视图,UImageview崩溃消失了.


Har*_*cha 19

Swift 3.0和Swift 4.0

sublayers属性设置为nil从视图中删除所有子图层.

view.layer.sublayers = nil
Run Code Online (Sandbox Code Playgroud)

你也可以添加

.removeAll()
Run Code Online (Sandbox Code Playgroud)


Har*_*kar 6

对于 swift5,从添加的视图中删除 CAShapeLayer

guard let sublayers = self.view.layer.sublayers else { return }

for sublayer in sublayers where sublayer.isKind(of: CAShapeLayer.self) {
        sublayer.removeFromSuperlayer()
}
Run Code Online (Sandbox Code Playgroud)