从视图中删除所有子层

问题描述 投票:46回答:7

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

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

....

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

rootLayer.sublayers = nil;

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

你可以帮帮我吗?比你!

ios objective-c calayer
7个回答
128
投票

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

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

或者,在斯威夫特

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

20
投票

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

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

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


18
投票

Swift 3.0和Swift 4.0

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

view.layer.sublayers = nil

你也可以添加

.removeAll()

3
投票

Swift 2.0:

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

要么

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

0
投票

Swift 4.1

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

或者如果在UIView子类中

layer.sublayers?.removeAll()


0
投票

如果要删除所有子图层并添加新图层,可以轻松执行以下操作:

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

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

如果您使用tableviewcollectionview cells,这可能会有所帮助。你不需要调用prepareForReuse来删除sublayers


-1
投票

SWIFT 4中简单的一个班轮。

self.view.layer.sublayers.removeAll()
© www.soinside.com 2019 - 2024. All rights reserved.