在动画中,我向视图添加了大量子图层,其中包含:
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
...
我想删除所有带有操作的子图层。 我已经尝试过这个类似问题的建议:
rootLayer.sublayers = nil;
但它不起作用......
你可以帮帮我吗? 比你!答案 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
如果您使用tableview
或collectionview 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()