【问题标题】:Check if a CALayer is already added as a sublayer检查是否已将 CALayer 添加为子层
【发布时间】:2012-05-07 13:53:16
【问题描述】:

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

【问题讨论】:

    标签: objective-c ios calayer


    【解决方案1】:

    您尝试过superlayer 属性吗?如果你的层没有添加到任何地方,它应该是 nil。

    【讨论】:

      【解决方案2】:

      我需要检查一个 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")
      }
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          XCode 11 - 斯威夫特 5

          if view.layer.sublayers == nil {
          
              // add Sublayer
          
          }
          

          【讨论】:

          • 我为什么要在超层上使用它?
          【解决方案5】:
          if (layer.superlayer == parentLayer) {
              ...
          } else {
              ...
          }
          

          【讨论】:

            【解决方案6】:
            • //检查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")
              
                                                         }
                                                     }
              
                                                 }
                                             }
                                         }
              

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-04-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-25
              • 2018-12-21
              相关资源
              最近更新 更多