Удалить все сублитеры из представления
В анимации я добавил много подслоев в представление :
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
....
Я хотел бы удалить все подслои с действием.
Я уже пробовал с этим предложением аналогичный вопрос:
rootLayer.sublayers = nil;
но он не работает...
Не могли бы вы мне помочь?
Чем ты!
Ответы
Ответ 1
Свойство sublayers
объекта CALayer
возвращает копию массива. Устанавливая его, ничего не делает ничего о подслоях. Однако это сделает:
for (CALayer *layer in self.view.layer.sublayers) {
[layer removeFromSuperlayer];
}
Или, в Swift
self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
Ответ 2
Это сработало для меня и устранило сбой:
[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
Я изменил представление с моим изображением UImageview
, и авария исчезла.
Ответ 3
Swift 3.0 и Swift 4.0
Установите для свойства sublayers
значение nil
чтобы удалить все подслои из представления.
view.layer.sublayers = nil
также вы можете добавить
.removeAll()
Ответ 4
Swift 2.0:
for layer: CALayer in self.view.layer.sublayers! {
layer.removeFromSuperlayer()
}
или
self.view.layer.performSelector("removeFromSuperlayer")
Ответ 5
Swift 4.1
self.view.layer.sublayers?.removeAll()
или если в подклассе UIView просто
layer.sublayers?.removeAll()
Ответ 6
Если вы хотите удалить все подслои и добавить новый, вы можете легко сделать:
rootLayer.sublayers = [layer1] // adding one layer
rootLayer.sublayers = [layer1, layer2, ...] // adding two or more layers
Это может быть полезно, если вы работаете с collectionview cells
tableview
или collectionview cells
. Вам не нужно вызывать prepareForReuse
для удаления sublayers
.
Ответ 7
Простой один лайнер в SWIFT 4.
self.view.layer.sublayers.removeAll()