アニメーションでは、多くのsublayersをviewに追加しました。
[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];
....
アクションですべてのサブレイヤーを削除したいと思います。私はすでに同様の質問のこの提案で試しました:
rootLayer.sublayers = nil;
しかし、それは動作しません...
私たちを手伝ってくれますか?あなたより!
sublayers
オブジェクトのCALayer
プロパティは、配列のコピーを返します。 noに設定しても、サブレイヤーについては何もしません。ただし、これは次のことを行います。
for (CALayer *layer in self.view.layer.sublayers) {
[layer removeFromSuperlayer];
}
または、Swiftで
self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
これは私のために働いて、クラッシュを修正しました:
[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
イメージUImageview
でビューを変更すると、クラッシュはなくなりました。
Swift 3.0&Swift 4.
ビューからすべてのサブレイヤーを削除するには、sublayers
プロパティをnil
に設定します。
view.layer.sublayers = nil
また、追加することができます
.removeAll()
Swift 2.0:
for layer: CALayer in self.view.layer.sublayers! {
layer.removeFromSuperlayer()
}
または
self.view.layer.performSelector("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
。 removing the prepareForReuse
に対してsublayers
を呼び出す必要はありません。