14

私は5つのCALayerを持っており、それぞれがプロパティです。それらのうちの3つをサブビューとして追加したとします。レイヤーの1つが既にレイヤーに追加されている場合は、チェックできるようにする必要があります。

4

6 に答える 6

19

superlayerプロパティを試しましたか?レイヤーがどこにも追加されていない場合は、nilになります。

于 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のような操作を実行できます。レイヤー数が期待どおりになったら、たとえば、これ以上追加しないでください。

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が別のビューのサブレイヤーであるかどうかを確認する必要がありました。そこにあるのはそれだけだったので、他に何もチェックする必要はありませんでした。上記の答えは私にはうまくいきませんでした。

私はこの答えに出くわしました。それは別の理由で使用されましたが、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")
}
于 2019-04-27T18:58:54.553 に答える
1

XCode 11-Swift 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 に答える