14

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

4

6 回答 6

19

你试过superlayer房产吗?如果您的图层未添加到任何地方,则它应该为零。

于 2012-05-07T13:55:40.847 回答
8
if (layer.superlayer == parentLayer) {
    ...
} else {
    ...
}
于 2012-05-07T13:55:42.523 回答
6

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.
}

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

于 2014-09-03T14:08:03.580 回答
2

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

我遇到了这个答案,即使出于不同的原因使用它也是一种简单的方法来检查 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")
}
于 2019-04-27T18:58:54.553 回答
1

XCode 11 - 斯威夫特 5

if view.layer.sublayers == nil {

    // add Sublayer

}
于 2019-11-24T13:07:29.380 回答
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")
    
                                               }
                                           }
    
                                       }
                                   }
                               }
    
于 2015-09-15T06:14:02.877 回答