gpt4 book ai didi

ios - 为什么在关闭模态视图 Controller 后从 View 中删除 CAGradientLayer

转载 作者:搜寻专家 更新时间:2023-11-01 06:34:08 25 4
gpt4 key购买 nike

我正在创建一个渐变层并将其添加到我的 MainViewController self.view。

override func viewDidLoad() {
super.viewDidLoad()

gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = colors
view.layer.insertSublayer(gradient, at: 0)

}

viewDidAppear 中,我正在枚举所有子层:

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 来解决这个问题,但我想了解为什么在 Controller 被关闭后删除了 CAGradientLayer .

最佳答案

我无法在简单的测试程序中重现您的情况。

这里有一些调试建议...

view.layers中找出渐变层被移除的位置, 定义

class MyCAGradientLayer: CAGradientLayer {
deinit {
print("there it goes")
}
}

并替换你的 CAGradientLayerMyCAGradientLayer这是在 viewDidLoad 中本地创建的.

override func viewDidLoad() {
super.viewDidLoad()

let gradient = MyCAGradientLayer()
gradient.frame = view.bounds
gradient.colors = colors
view.layer.insertSublayer(gradient, at: 0)
}

viewDidLoad 之后完成局部变量 gradient将发布其对 gradient 的引用并且只有一个引用 gradient将存在(view.layers 数组中的那个)。

print 上设置断点声明以查看它在哪里被释放。

关于ios - 为什么在关闭模态视图 Controller 后从 View 中删除 CAGradientLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43570657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com