检查CALayer是否已添加为子图层

问题描述 投票:9回答:5

我有5个CALayers,每个都是一个属性。说我添加了3个作为子视图。如果其中一个图层已经添加到图层中,我需要能够chk。

objective-c ios calayer
5个回答
13
投票

你试过superlayer财产吗?如果你的图层没有添加到任何地方,它应该是零。


8
投票
if (layer.superlayer == parentLayer) {
    ...
} else {
    ...
}

5
投票

view.layer.sublayers为您提供了一个子图层数组,以查看您的图层是否已添加,您可以执行类似view.layer.sublayers.count的操作,一旦图层数达到您预期的不会为ex添加更多。

if (view.layer.sublayers.count  < 3) {
//add layer
}else{
// do nothing because the layer has already been added.
}

您还可以检查子图层数组中的每个图层,以便更好地识别您要查找的图层。由于它们是属性,因此您应该能够与数组中的每个图层进行比较,以查看是否已添加了您要查找的图层。


0
投票
  • //检查CALayer包含子图层(shpapelayer / textlayer) if myShapeLayer.sublayers?.count>0 { var arr:NSArray? = myShapeLayer.sublayers as NSArray var i:Int=0 for i in 0..<arr!.count { var a: AnyObject = arr!.objectAtIndex(i) if a.isKindOfClass(CAShapeLayer) || a.isKindOfClass(CATextLayer) { if a.isKindOfClass(CAShapeLayer) { a = a as! CAShapeLayer if CGPathContainsPoint(a.path, nil, pointOfCircle, true) { NSLog("contains shape layer") } else { NSLog("not contains shape layer") } } if a.isKindOfClass(CATextLayer) { a = a as! CATextLayer var fr:CGRect = a.frame as CGRect if CGRectContainsPoint(fr, pointOfCircle) { NSLog("contains textlayer") } else { NSLog("not contains textlayer") } } } } }

0
投票

我需要检查一下gradientLayer是否是另一个视图的subLayer。它是那里唯一的一层,所以我没有必要检查其他任何东西。上面的答案对我不起作用。

我遇到了this answer,即使它被用于不同的原因,它是一个简单的方法来检查gradientLayer是否是另一个视图的图层属性(parentLayer)的子,它对我来说工作正常:

if let _ = (yourParentView.layer.sublayers?.compactMap { $0 as? CAGradientLayer })?.first {

    print("the gradientLayer IS already a subLayer of this parentView's layer property")
} else {

    print("the gradientLayer IS NOT a subLayer of this parentView's layer property")
}
© www.soinside.com 2019 - 2024. All rights reserved.