グラデーションレイヤを作成して、MainViewController
self.viewに追加しています。 viewDidAppear
インサイドモーダルビューコントローラが閉じられた後、CAGradientLayerが表示から削除される理由
override func viewDidLoad() {
super.viewDidLoad()
gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = colors
view.layer.insertSublayer(gradient, at: 0)
}
私はすべてのサブレイヤを列挙しています:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
for x in (view.layer.sublayers)! {
print(x)
}
}
これは私が(正常)アプリを実行しているときに私が得るものです:
<CAGradientLayer: 0x608000224120>
<_UILabelLayer: 0x60000009a400>
<_UILabelLayer: 0x60800009f180>
<CALayer: 0x600000422d60>
<CALayer: 0x608000223820>
その後MainViewController
から私はモーダルに別のVCを提示し、それを却下する。このMainVC viewDidAppear
が再び呼び出されたが、今回は私が取得した後、この:
<_UILabelLayer: 0x60000009a400>
<_UILabelLayer: 0x60800009f180>
<CALayer: 0x600000422d60>
<CALayer: 0x608000223820>
CAGradientLayer
はself.viewから削除されました。私はviewDidLoad
からviewDidAppear
に自分のコードを移動することでこれを解決できますが、コントローラが破棄された後になぜCAGradientLayer
が削除されたのか理解したいと思います。
'super.viewDidAppear(animated)'を呼び出す前に印刷してみましたか? –
viewWillAppearで印刷する場合も同じ問題 – Kobe
'UIViewController'を直接サブクラス化しましたか? –