在iPhone中标记CALayers

Pey*_*man 23 search calayer

我正在寻找能够在层次结构中搜索唯一CALayer的一般方法,而不必记住层在层次结构中的位置(并使用子层:和superlayer:方法).

我知道UIViews可以实现这一点(这使得查看视图变得容易)但CALayer有可能吗?

预先感谢您的帮助

Peyman的

小智 56

您还可以使用CALayer的name属性.

[layer setName:@"myKey"];
Run Code Online (Sandbox Code Playgroud)

要查一查,

- (CALayer *)myLayer {

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

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

    return nil;
}
Run Code Online (Sandbox Code Playgroud)


Pey*_*man 23

道歉.我是个笨蛋.CALayer是一个符合键值编码的容器,因此我可以在任何实例中创建任意值(包括标签).例如,要创建标记,我们执行以下操作:

[rootLayer setValue:[NSNumber numberWithInt:101] forKey:@"PFtag"];
Run Code Online (Sandbox Code Playgroud)

谢谢


Ani*_*ale 6

在Swift中你可以做到这一点

let layer = CAShapeLayer()
layer.name = "\(index)"
Run Code Online (Sandbox Code Playgroud)

然后要获得图层,您可以执行此操作

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


Cod*_*der 6

现代安全的解决方案。

为图层指定名称:

layer.name = "MyLayer"
Run Code Online (Sandbox Code Playgroud)

然后,过滤所有子层以搜索名称:

layer.sublayers?
    .filter { layer in return layer.name == "MyLayer" }
    .forEach { layer in
        layer.removeFromSuperlayer()
        layer.removeAllAnimations()
}
Run Code Online (Sandbox Code Playgroud)