2010-05-17 3 views
20

Я ищу общий способ поиска уникального CALayer в иерархии без необходимости запоминать, где находится слой в иерархии (и использовать методы подслоя: и superlayer:).Tagging CALayers in iPhone

Я знаю, что это возможно с помощью UIViews (что облегчает просмотр листа), но возможно ли CALayer?

заранее спасибо за вашу помощь

Пеймана

ответ

23

извиняться. Я был дураком. CALayer является контейнером, совместимым с кодировкой ключа, поэтому я могу создавать произвольные значения (включая теги) в любом случае. Чтобы создать тег, например, мы делаем:

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

поблагодарить вас

53

Вы также можете использовать имя свойства CALayer.

[layer setName:@"myKey"]; 

Чтобы посмотреть его,

- (CALayer *)myLayer { 

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

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

    return nil; 
} 
+1

Хм. Невозможно получить слой по имени, кроме хождения? Ах, хорошо, это лучше, чем ничего! –

+0

Может использовать свойство, чтобы не допустить, чтобы я предполагал. Было бы неплохо, если бы это было возможно. –

0

В Swift вы можете сделать это

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

Затем, чтобы получить слои вы можете сделать это

for item in self.layer.sublayers! { 
    if item.name == "\(index)" { 
     item.removeFromSuperlayer() 
     item.removeAllAnimations() 
    } 
} 
Смежные вопросы