Search 在iPhone中标记CALayers
我正在寻找一种通用方法,可以在层次结构中搜索唯一的CALayer,而不必记住层在层次结构中的位置(并使用sublayer:和superlayer:方法) 我知道这在UIViews中是可能的(这使得翻转视图变得很容易),但是对于CALayer有可能吗 提前感谢您的帮助Search 在iPhone中标记CALayers,search,calayer,Search,Calayer,我正在寻找一种通用方法,可以在层次结构中搜索唯一的CALayer,而不必记住层在层次结构中的位置(并使用sublayer:和superlayer:方法) 我知道这在UIViews中是可能的(这使得翻转视图变得很容易),但是对于CALayer有可能吗 提前感谢您的帮助 佩曼道歉。我是个笨蛋。CALayer是一个兼容键值编码的容器,因此我可以在任何实例中创建任意值(包括标记)。例如,要创建标记,我们需要执行以下操作: [rootLayer setValue:[NSNumber numberWithI
佩曼道歉。我是个笨蛋。CALayer是一个兼容键值编码的容器,因此我可以在任何实例中创建任意值(包括标记)。例如,要创建标记,我们需要执行以下操作:
[rootLayer setValue:[NSNumber numberWithInt:101] forKey:@"PFtag"];
谢谢您也可以使用CALayer的name属性
[layer setName:@"myKey"];
要查找它
- (CALayer *)myLayer {
for (CALayer *layer in [superLayerOfMyLayer sublayers]) {
if ([[layer name] isEqualToString:LabelLayerName]) {
return layer;
}
}
return nil;
}
在斯威夫特你可以做到这一点
let layer = CAShapeLayer()
layer.name = "\(index)"
for item in self.layer.sublayers! {
if item.name == "\(index)" {
item.removeFromSuperlayer()
item.removeAllAnimations()
}
}
然后,要获得图层,您可以这样做
let layer = CAShapeLayer()
layer.name = "\(index)"
for item in self.layer.sublayers! {
if item.name == "\(index)" {
item.removeFromSuperlayer()
item.removeAllAnimations()
}
}
这是一个现代的保险柜 为图层指定名称:
layer.name = "MyLayer"
然后,过滤搜索名称的所有子层:
layer.sublayers?
.filter { layer in return layer.name == "MyLayer" }
.forEach { layer in
layer.removeFromSuperlayer()
layer.removeAllAnimations()
}
首先,您需要命名您的CALayer:
let shadowLayer = CALayer()
shadowLayer.name = "myname"
之后,您只需按名称进行搜索:
if let neuBlackLayer = layer.sublayers?.first(where: { $0.name == "myname" }) {
// do something with your layer
}
与guard相同:
guard let neuBlackLayer = layer.sublayers?.first(where: { $0.name == "myname" }) else { return }
// do something with your layer
添加此答案以澄清其他人的答案:
嗯,除了把他们都带走,没办法按名字来弄到一层?啊,好吧,总比什么都没有好!我想我可以用一处房产来避免不得不这样做。不过,如果能有办法查一下,那就太好了。很好的解决方案!我想你可以用
$0.name==“MyLayer”
替换返回层中的层。谢谢@koen,这肯定是有效的,但有时我更喜欢用$0来清晰地命名它。然而,这两种方法都可以很好地工作&归结为开发人员首选项/强制样式(如果适用),现在在循环中使用where子句比在self.layer.sublayers中使用if语句:更为惯用!其中item.name==“\(索引)”
。也许最好不要使用强制展开,但这更主观。