Подтвердить что ты не робот

Удалить все сублитеры из представления

В анимации я добавил много подслоев в представление :

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

....

Я хотел бы удалить все подслои с действием. Я уже пробовал с этим предложением аналогичный вопрос:

rootLayer.sublayers = nil;

но он не работает...

Не могли бы вы мне помочь? Чем ты!

4b9b3361

Ответ 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()