2010-05-17 19 views
20

Katmanın hiyerarşide nerede olduğunu hatırlamak zorunda kalmadan hiyerarşide benzersiz bir CALayer araması yapmanın genel bir yolunu arıyorum (ve alt katman: ve süper katman: yöntemleri kullanın).iPhone'da CALayer'ları Etiketleme

UIViews ile bu mümkün olduğunu biliyorum (ki bu da saygısız bakışları kolaylaştırır) ancak CALayer için mümkün mü?

cevap

23

Özür Yardımlarınız

Peyman için şimdiden teşekkür ederiz. Bir dunce oluyordum. CALayer, anahtar-değer kodlaması uyumlu bir kapsayıcıdır, böylece herhangi bir örnekte rasgele değerler (etiketler dahil) oluşturabilirim.

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

Eğer

53

Ayrıca CALayer ismi özelliğini kullanabilirsiniz teşekkür: Yaptığımız örneğin bir etiket oluşturmak.

[layer setName:@"myKey"]; 

o kadar bakmak için,

- (CALayer *)myLayer { 

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

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

    return nil; 
} 
+1

Hmm yapabileceği katmanları almak yapabilirsiniz. Yürümek dışında başka bir isimle bir katman elde etmenin yolu yok mu? Ahh, hiç yoktan iyidir! –

+0

Sanırım sahip olmamak için bir özellik kullanabilirsiniz. Yine de bakmanın bir yolu olması güzel olurdu. –

0

Swift size bu

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

Sonra bu

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