60

アニメーションでは、ビューに多くのサブレイヤーを追加しました。

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

...。

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

rootLayer.sublayers = nil;

しかし、それは機能しません...

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

4

9 に答える 9

153

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

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

または、Swiftで

self.view.layer.sublayers?.forEach { $0.removeFromSuperlayer() }
于 2012-05-28T20:06:34.863 に答える
30

Swift3.0およびSwift4.0

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

view.layer.sublayers = nil

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

.removeAll()
于 2017-04-18T10:33:34.430 に答える
22

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

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

画像でビューを変更しましたがUImageview、クラッシュはなくなりました。

于 2013-09-16T15:46:22.313 に答える
4

Swift 2.0:

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

また

    self.view.layer.performSelector("removeFromSuperlayer")
于 2016-02-09T10:27:57.217 に答える
2

スウィフト5:

レイヤー自体を削除するか、レイヤーを反復処理して次の操作を行うことができます。

layer.removeAllAnimations()
layer.removeFromSuperlayer()
于 2019-10-29T17:24:36.963 に答える
2

swift5が追加されたビューからCAShapeLayerを削除する場合

for layer in self.view.layer.sublayers! {
   if layer.isKind(of: CAShapeLayer.self) {
      layer.removeFromSuperlayer()
   }
}
于 2020-07-29T11:16:11.670 に答える
1

Swift 4.1

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

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

layer.sublayers?.removeAll()

于 2018-09-06T12:27:15.163 に答える
0

すべてのサブレイヤーを削除して新しいサブレイヤーを追加する場合は、次のように簡単に実行できます。

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

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

tableviewまたはを使用する場合、これは役立つ可能性がありますcollectionview cellsprepareForReuse削除するために呼び出す必要はありませんsublayers

于 2019-04-07T21:41:34.313 に答える
-1

SWIFT4のシンプルなワンライナー。

self.view.layer.sublayers.removeAll()
于 2018-08-02T16:43:27.510 に答える