【发布时间】:2012-05-07 13:53:16
【问题描述】:
我有 5 个 CALayers,每个都是一个属性。假设我添加了 3 个作为子视图。如果其中一个图层已经添加到图层中,我需要能够检查。
【问题讨论】:
标签: objective-c ios calayer
我有 5 个 CALayers,每个都是一个属性。假设我添加了 3 个作为子视图。如果其中一个图层已经添加到图层中,我需要能够检查。
【问题讨论】:
标签: objective-c ios calayer
您尝试过superlayer 属性吗?如果你的层没有添加到任何地方,它应该是 nil。
【讨论】:
我需要检查一个 gradientLayer 是否是另一个视图的 subLayer。这是那里唯一的一层,所以我不必检查其他任何东西。上面的答案对我不起作用。
我遇到了this answer,尽管它用于不同的原因,但它是一种简单的方法来检查 gradientLayer 是否是另一个视图的 layer 属性(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")
}
【讨论】:
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.
}
您还可以检查子图层数组中的每个图层,以更好地识别您要查找的图层。由于它们是属性,因此您应该能够对数组中的每个层进行比较,以查看您要查找的层是否已添加。
【讨论】:
XCode 11 - 斯威夫特 5
if view.layer.sublayers == nil {
// add Sublayer
}
【讨论】:
if (layer.superlayer == parentLayer) {
...
} else {
...
}
【讨论】:
//检查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")
}
}
}
}
}
【讨论】: