web-dev-qa-db-ja.com

ビューからすべてのサブレイヤーを削除します

アニメーションでは、多くのsublayersviewに追加しました。

[self.view.layer addSublayer:layer1];
[self.view.layer addSublayer:layer2];

....

アクションですべてのサブレイヤーを削除したいと思います。私はすでに同様の質問のこの提案で試しました:

rootLayer.sublayers = nil;

しかし、それは動作しません...

私たちを手伝ってくれますか?あなたより!

46
Beppino66

sublayersオブジェクトのCALayerプロパティは、配列のコピーを返します。 noに設定しても、サブレイヤーについては何もしません。ただし、これは次のことを行います。

for (CALayer *layer in self.view.layer.sublayers) {
    [layer removeFromSuperlayer];
}

または、Swiftで

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
129

これは私のために働いて、クラッシュを修正しました:

[self.view.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]

イメージUImageviewでビューを変更すると、クラッシュはなくなりました。

20
Hussain1982

Swift 3.0&Swift 4.

ビューからすべてのサブレイヤーを削除するには、sublayersプロパティをnilに設定します。

view.layer.sublayers = nil

また、追加することができます

.removeAll()
18
Harshil Kotecha

Swift 2.0:

    for layer: CALayer in self.view.layer.sublayers! {
        layer.removeFromSuperlayer()
    }

または

    self.view.layer.performSelector("removeFromSuperlayer")
3
A.G

Swift 4.1

self.view.layer.sublayers?.removeAll()

またはUIViewサブクラスの場合

layer.sublayers?.removeAll()

0
JonJ

すべてのサブレイヤーを削除して新しいサブレイヤーを追加するにしたい場合、簡単にできます:

rootLayer.sublayers = [layer1] // adding one layer

rootLayer.sublayers = [layer1, layer2, ...] // adding two or more layers

これは、tableviewまたはcollectionview cellsremoving the prepareForReuseに対してsublayersを呼び出す必要はありません。

0
Sean Stayn