私は5つのCALayerを持っており、それぞれがプロパティです。それらのうちの3つをサブビューとして追加したとします。レイヤーの1つが既にレイヤーに追加されている場合は、チェックできるようにする必要があります。
6 に答える
superlayer
プロパティを試しましたか?レイヤーがどこにも追加されていない場合は、nilになります。
if (layer.superlayer == parentLayer) {
...
} else {
...
}
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.
}
サブレイヤー配列の各レイヤーを調べて、探しているレイヤーをより適切に特定することもできます。これらはプロパティであるため、配列内の各レイヤーと比較して、探しているレイヤーが追加されているかどうかを確認できるはずです。
私は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")
}
XCode 11-Swift 5
if view.layer.sublayers == nil {
// add Sublayer
}
// 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") } } } } }