从视图中删除所有子层

时间:2012-05-28 19:48:46

标签: ios objective-c calayer

在动画中,我向视图添加了大量子图层,其中包含:

[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];

...

我想删除所有带有操作的子图层。 我已经尝试过这个类似问题的建议:

rootLayer.sublayers = nil;

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

你可以帮帮我吗? 比你!

9 个答案:

答案 0 :(得分:127)

sublayers对象的CALayer属性返回数组的副本。设置它不是零没有关于子层。但是这样做:

for (CALayer *layer in self.view.layer.sublayers) {
    [layer removeFromSuperlayer];
}

或者,在Swift中

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }

答案 1 :(得分:20)

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

[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]

我用我的图片UImageview更改了视图,崩溃消失了。

答案 2 :(得分:17)

Swift 3.0& Swift 4.0

TryParse属性设置为sublayers以从视图中删除所有子图层。

nil

你也可以添加

view.layer.sublayers = nil

答案 3 :(得分:3)

Swift 2.0:

    for layer: CALayer in self.view.layer.sublayers! {
        layer.removeFromSuperlayer()
    }

    self.view.layer.performSelector("removeFromSuperlayer")

答案 4 :(得分:1)

雨燕5:

您可以删除图层本身,也可以对其进行遍历并执行以下操作:

layer.removeAllAnimations()
layer.removeFromSuperlayer()

答案 5 :(得分:0)

Swift 4.1

self.view.layer.sublayers?.removeAll()

或者如果只是在UIView子类中

layer.sublayers?.removeAll()

答案 6 :(得分:0)

如果您要删除所有子层并添加新的子层,则可以轻松完成以下操作:

rootLayer.sublayers = [layer1] // adding one layer

rootLayer.sublayers = [layer1, layer2, ...] // adding two or more layers

如果您使用tableviewcollectionview cells,这可能会有所帮助。您无需致电prepareForReuse即可卸下 sublayers

答案 7 :(得分:0)

要让swift5从添加的视图中删除CAShapeLayer

for layer in self.view.layer.sublayers! {
   if layer.isKind(of: CAShapeLayer.self) {
      layer.removeFromSuperlayer()
   }
}

答案 8 :(得分:-1)

SWIFT 4中一个简单的衬纸。

self.view.layer.sublayers.removeAll()