2010-05-17 5 views
20

Je cherche une manière générale de pouvoir rechercher un CALayer unique dans une hiérarchie sans avoir à se souvenir où la couche est dans une hiérarchie (et utiliser la sous-couche: et superlayer: méthodes).Marquage CALayers dans l'iPhone

Je sais que c'est possible avec UIViews (ce qui rend les vues basculantes faciles) mais est-ce possible pour CALayer?

vous remercie d'avance pour votre aide

Peyman

Répondre

23

apologize. J'étais un cancre. CALayer est un conteneur compatible avec le codage de valeur-clé afin que je puisse créer des valeurs arbitraires (y compris des balises) dans n'importe quelle instance. Pour créer une étiquette, par exemple, nous faisons:

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

merci

53

Vous pouvez également utiliser la propriété du nom CALayer.

[layer setName:@"myKey"]; 

Pour le chercher,

- (CALayer *)myLayer { 

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

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

    return nil; 
} 
+1

Hmm. Pas moyen d'obtenir un calque par nom autre que de les promener tous? Ahh, c'est mieux que rien! –

+0

Pourrait utiliser une propriété pour éviter d'avoir à le faire. Ce serait bien d'avoir un moyen de le chercher. –

0

Swift vous pouvez le faire

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

ensuite pour obtenir les couches que vous pouvez le faire

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