web-dev-qa-db-fra.com

supprimer toutes les sous-couches d'une vue

Dans une animation, j'ai ajouté beaucoup de sous-couches à une vue , avec:

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

....

Je voudrais supprimer toutes les sous-couches avec une action ..__ J'ai déjà essayé avec cette suggestion d'une question similaire:

rootLayer.sublayers = nil;

mais ça ne marche pas ...

Pourriez-vous m'aider?

45
Beppino66

La propriété sublayers d'un objet CALayer renvoie une copie du tableau. Le réglage non nul ne fait rien pour les sous-couches. Cela fera cependant:

for (CALayer *layer in self.view.layer.sublayers) {
    [layer removeFromSuperlayer];
}

Ou, à Swift

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
123

Cela a fonctionné pour moi et corrigé le crash:

[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]

J'ai changé la vue avec mon image UImageview, et le crash est parti.

20
Hussain1982

Swift 3.0 & Swift 4.0

Définissez la propriété sublayers sur nil pour supprimer tous les sous-couches d'une vue.

view.layer.sublayers = nil

aussi vous pouvez ajouter 

.removeAll()
16
Harshil Kotecha

Swift 2.0:

    for layer: CALayer in self.view.layer.sublayers! {
        layer.removeFromSuperlayer()
    }

ou 

    self.view.layer.performSelector("removeFromSuperlayer")
3
A.G