我正在寻找能够在层次结构中搜索唯一CALayer的一般方法,而不必记住层在层次结构中的位置(并使用sublayer:和superlayer:methods)。
我知道UIViews可以实现这一点(这使得查看视图变得容易)但是CALayer可以吗?
提前感谢您的帮助
Peyman的
答案 0 :(得分:56)
您还可以使用CALayer的name属性。
[layer setName:@"myKey"];
要查找,
- (CALayer *)myLayer {
for (CALayer *layer in [superLayerOfMyLayer sublayers]) {
if ([[layer name] isEqualToString:LabelLayerName]) {
return layer;
}
}
return nil;
}
答案 1 :(得分:23)
道歉。我是个笨蛋。 CALayer是一个符合键值编码的容器,因此我可以在任何实例中创建任意值(包括标签)。例如,要创建标记,我们执行以下操作:
[rootLayer setValue:[NSNumber numberWithInt:101] forKey:@"PFtag"];
谢谢
答案 2 :(得分:5)
在Swift中你可以做到这一点
for item in self.layer.sublayers! {
if item.name == "\(index)" {
item.removeFromSuperlayer()
item.removeAllAnimations()
}
}
然后获取图层可以执行此操作
{{1}}
答案 3 :(得分:1)
对此事采取现代安全措施。
为图层分配名称:
layer.name = "MyLayer"
然后,过滤所有子层以搜索名称:
layer.sublayers?
.filter { layer in return layer.name == "MyLayer" }
.forEach { layer in
layer.removeFromSuperlayer()
layer.removeAllAnimations()
}
答案 4 :(得分:1)
首先,您需要命名 CALayer :
let shadowLayer = CALayer()
shadowLayer.name = "myname"
之后,您只需按名称进行搜索:
if let neuBlackLayer = layer.sublayers?.first(where: { $0.name == "myname" }) {
// do something with your layer
}
与警卫相同:
guard let neuBlackLayer = layer.sublayers?.first(where: { $0.name == "myname" }) else { return }
// do something with your layer
添加了此答案以澄清其他人的答案: