Пометка CALayers в iPhone - PullRequest
       14

Пометка CALayers в iPhone

23 голосов
/ 18 мая 2010

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

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

заранее благодарю за помощь

Пеймана

Ответы [ 4 ]

56 голосов
/ 11 ноября 2010

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

[layer setName:@"myKey"];

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

- (CALayer *)myLayer {

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

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

    return nil;
}
23 голосов
/ 18 мая 2010

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

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

спасибо

5 голосов
/ 13 февраля 2018

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

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

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

for item in self.layer.sublayers! {
    if item.name == "\(index)" {
        item.removeFromSuperlayer()
        item.removeAllAnimations()
    }
}
2 голосов
/ 07 января 2019

Современный безопасный взгляд на это.

Назначьте имя слою:

layer.name = "MyLayer"

Затем отфильтруйте все подслои в поисках имени:

layer.sublayers?
    .filter { layer in return layer.name == "MyLayer" }
    .forEach { layer in
        layer.removeFromSuperlayer()
        layer.removeAllAnimations()
}
...