2012-05-28 15 views
33

En una animación he añadido un montón de subcapas a una vista , con:eliminar todas las subcapas de una visión

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

....

quisiera eliminar todas las subcapas con una acción. ya he intentado con esta sugerencia de una pregunta similar:

rootLayer.sublayers = nil; 

pero no funciona ...

¿Me podría ayudar? que tú!

Respuesta

91

La propiedad sublayers de un objeto CALayer devuelve una copia de la matriz. Al establecerlo no hay nada, no hace nada acerca de las subcapas. Sin embargo, esto hará:

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

O, en Swift

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

Parece que estoy equivocado. Puede establecer las 'subcapas' en una matriz prepoblada con objetos' CALayer'. Mi solución sigue siendo correcta, sin embargo. También este oneliner probablemente debería funcionar (no probado): '[self.view.layer.sublayers makeObjectsPerformSelector: @selector (removeFromSuperlayer)] ' –

+0

@SveinHalvorHalvorsen Esa única línea funciona. Es mucho más limpio que un bucle – catalyst294

+0

Además, a veces es problemático mutar una matriz mientras se itera a través de ella. Tal vez funcione aquí, pero en general puede ser problemático. – Rob

20

Esto funcionó para mí y fija el accidente:

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

he cambiado la vista con mi imagen UImageview, y el el accidente se ha ido.

2

Swift 2.0:

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

o

self.view.layer.performSelector("removeFromSuperlayer") 
9

Swift 3,0 & Swift 4,0

Establecer la propiedad sublayers-nil para eliminar todas las subcapas de una vista.

view.layer.sublayers = nil 
Cuestiones relacionadas