アニメーションでは、ビューに多くのサブレイヤーを追加しました。
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
...。
アクションですべてのサブレイヤーを削除したいと思います。私はすでに同様の質問のこの提案を試しました:
rootLayer.sublayers = nil;
しかし、それは機能しません...
私たちを手伝ってくれますか?あなたより!
アニメーションでは、ビューに多くのサブレイヤーを追加しました。
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
...。
アクションですべてのサブレイヤーを削除したいと思います。私はすでに同様の質問のこの提案を試しました:
rootLayer.sublayers = nil;
しかし、それは機能しません...
私たちを手伝ってくれますか?あなたより!
オブジェクトのsublayers
プロパティはCALayer
、配列のコピーを返します。no nilに設定しても、サブレイヤーについては何もしません。ただし、これは次のようになります。
for (CALayer *layer in self.view.layer.sublayers) {
[layer removeFromSuperlayer];
}
または、Swiftで
self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
Swift3.0およびSwift4.0
ビューからすべてのサブレイヤーを削除するには、sublayers
プロパティをに設定します。nil
view.layer.sublayers = nil
また、追加することができます
.removeAll()
これは私のために働き、クラッシュを修正しました:
[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
画像でビューを変更しましたがUImageview
、クラッシュはなくなりました。
Swift 2.0:
for layer: CALayer in self.view.layer.sublayers! {
layer.removeFromSuperlayer()
}
また
self.view.layer.performSelector("removeFromSuperlayer")
スウィフト5:
レイヤー自体を削除するか、レイヤーを反復処理して次の操作を行うことができます。
layer.removeAllAnimations()
layer.removeFromSuperlayer()
swift5が追加されたビューからCAShapeLayerを削除する場合
for layer in self.view.layer.sublayers! {
if layer.isKind(of: CAShapeLayer.self) {
layer.removeFromSuperlayer()
}
}
Swift 4.1
self.view.layer.sublayers?.removeAll()
または、UIViewサブクラスの場合
layer.sublayers?.removeAll()
すべてのサブレイヤーを削除して新しいサブレイヤーを追加する場合は、次のように簡単に実行できます。
rootLayer.sublayers = [layer1] // adding one layer
rootLayer.sublayers = [layer1, layer2, ...] // adding two or more layers
tableview
またはを使用する場合、これは役立つ可能性がありますcollectionview cells
。prepareForReuse
を削除するために呼び出す必要はありませんsublayers
。
SWIFT4のシンプルなワンライナー。
self.view.layer.sublayers.removeAll()