在动画中,我在视图中添加了许多子图层,其中:
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
....
我想通过一个动作删除所有子图层。我已经尝试过这个类似问题的建议:
rootLayer.sublayers = nil;
但它不起作用......
你可以帮帮我吗?比你!
sublayers
对象的CALayer
属性返回数组的副本。设置它不是零没有关于子层。然而,这将做:
for (CALayer *layer in self.view.layer.sublayers) {
[layer removeFromSuperlayer];
}
或者,在斯威夫特
self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
这对我有用并修复了崩溃:
[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
我用我的图像UImageview
改变了视图,崩溃消失了。
Swift 3.0和Swift 4.0
将sublayers
属性设置为nil
以从视图中删除所有子图层。
view.layer.sublayers = nil
你也可以添加
.removeAll()
Swift 2.0:
for layer: CALayer in self.view.layer.sublayers! {
layer.removeFromSuperlayer()
}
要么
self.view.layer.performSelector("removeFromSuperlayer")
Swift 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
或collectionview cells
,这可能会有所帮助。你不需要调用prepareForReuse
来删除sublayers
。
SWIFT 4中简单的一个班轮。
self.view.layer.sublayers.removeAll()