2010-05-17 31 views
20

Estoy buscando una manera general, para poder buscar un CALayer único en una jerarquía sin tener que recordar que la capa está en una jerarquía (y el uso de la subcapa, y superlayer: métodos).CALayers de marcado en iPhone

Sé que esto es posible con UIViews (lo que hace fácil volteando vistas), pero es posible que CALayer?

gracias de antemano por su ayuda

Peyman

Respuesta

23

Apologize. Estaba siendo un tonto. CALayer es un contenedor compatible con la codificación de clave y valor, por lo que puedo crear valores arbitrarios (incluidas las etiquetas) en cualquier instancia. Para crear una etiqueta, por ejemplo, hacemos:

[rootLayer setValue:[NSNumber numberWithInt:101] forKey:@"PFtag"]; 

agradecimiento

53

También puede utilizar la propiedad nombre del CALayer.

[layer setName:@"myKey"]; 

que mirar hacia arriba,

- (CALayer *)myLayer { 

    for (CALayer *layer in [superLayerOfMyLayer sublayers]) { 

      if ([[layer name] isEqualToString:LabelLayerName]) { 
       return layer; 
      } 
    } 

    return nil; 
} 
+1

Hmm. ¿No hay forma de obtener una capa por nombre que no sea caminar? Ahh bueno, es mejor que nada! –

+0

Podría usar una propiedad para evitar tener que supongo. Sin embargo, sería bueno tener una forma de buscarlo. –

0

En Swift se puede hacer esto

let layer = CAShapeLayer() 
layer.name = "\(index)" 

luego a que las capas se puede hacer esto

for item in self.layer.sublayers! { 
    if item.name == "\(index)" { 
     item.removeFromSuperlayer() 
     item.removeAllAnimations() 
    } 
} 
Cuestiones relacionadas