60

在动画中,我向视图添加了很多子其中:

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

……

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

rootLayer.sublayers = nil;

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

你可以帮帮我吗?比你!

4

9 回答 9

153

对象的sublayers属性CALayer返回数组的副本。将其设置为 no nil 对子层没有任何作用。然而,这会做:

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

或者,在斯威夫特

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
于 2012-05-28T20:06:34.863 回答
30

斯威夫特 3.0 和斯威夫特 4.0

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

view.layer.sublayers = nil

你也可以添加

.removeAll()
于 2017-04-18T10:33:34.430 回答
22

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

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

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

于 2013-09-16T15:46:22.313 回答
4

斯威夫特 2.0:

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

或者

    self.view.layer.performSelector("removeFromSuperlayer")
于 2016-02-09T10:27:57.217 回答
2

斯威夫特 5:

您可以删除图层本身或遍历它们并执行以下操作:

layer.removeAllAnimations()
layer.removeFromSuperlayer()
于 2019-10-29T17:24:36.963 回答
2

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

for layer in self.view.layer.sublayers! {
   if layer.isKind(of: CAShapeLayer.self) {
      layer.removeFromSuperlayer()
   }
}
于 2020-07-29T11:16:11.670 回答
1

斯威夫特 4.1

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

或者如果只是在 UIView 子类中

layer.sublayers?.removeAll()

于 2018-09-06T12:27:15.163 回答
0

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

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

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

如果您使用tableviewor ,这可能会有所帮助collectionview cells。您无需调用prepareForReuse删除.sublayers

于 2019-04-07T21:41:34.313 回答
-1

SWIFT 4 中的简单一个班轮。

self.view.layer.sublayers.removeAll()
于 2018-08-02T16:43:27.510 回答