在动画中,我向视图添加了很多子层,其中:
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
……
我想通过一个动作删除所有子层。我已经尝试过提出类似问题的建议:
rootLayer.sublayers = nil;
但它不起作用......
你可以帮帮我吗?比你!
在动画中,我向视图添加了很多子层,其中:
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
……
我想通过一个动作删除所有子层。我已经尝试过提出类似问题的建议:
rootLayer.sublayers = nil;
但它不起作用......
你可以帮帮我吗?比你!
对象的sublayers
属性CALayer
返回数组的副本。将其设置为 no nil 对子层没有任何作用。然而,这会做:
for (CALayer *layer in self.view.layer.sublayers) {
[layer removeFromSuperlayer];
}
或者,在斯威夫特
self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
斯威夫特 3.0 和斯威夫特 4.0
将该sublayers
属性设置为nil
以从视图中删除所有子图层。
view.layer.sublayers = nil
你也可以添加
.removeAll()
这对我有用并修复了崩溃:
[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
我用我的图像更改了视图,UImageview
崩溃消失了。
斯威夫特 2.0:
for layer: CALayer in self.view.layer.sublayers! {
layer.removeFromSuperlayer()
}
或者
self.view.layer.performSelector("removeFromSuperlayer")
斯威夫特 5:
您可以删除图层本身或遍历它们并执行以下操作:
layer.removeAllAnimations()
layer.removeFromSuperlayer()
让 swift5 从添加的视图中删除 CAShapeLayer
for layer in self.view.layer.sublayers! {
if layer.isKind(of: CAShapeLayer.self) {
layer.removeFromSuperlayer()
}
}
斯威夫特 4.1
self.view.layer.sublayers?.removeAll()
或者如果只是在 UIView 子类中
layer.sublayers?.removeAll()
如果您想删除所有子图层并添加一个新子图层,您可以轻松执行以下操作:
rootLayer.sublayers = [layer1] // adding one layer
rootLayer.sublayers = [layer1, layer2, ...] // adding two or more layers
如果您使用tableview
or ,这可能会有所帮助collectionview cells
。您无需调用prepareForReuse
删除.sublayers
SWIFT 4 中的简单一个班轮。
self.view.layer.sublayers.removeAll()