Ios 为什么在模态视图控制器关闭后,CAGRADENTLAYER从视图中删除
我正在创建渐变层并将其添加到我的Ios 为什么在模态视图控制器关闭后,CAGRADENTLAYER从视图中删除,ios,swift,cagradientlayer,Ios,Swift,Cagradientlayer,我正在创建渐变层并将其添加到我的MainViewControllerself.view override func viewDidLoad() { super.viewDidLoad() gradient = CAGradientLayer() gradient.frame = view.bounds gradient.colors = colors view.layer.insertSublayer(gradient, at: 0) } 在view
MainViewController
self.view
override func viewDidLoad() {
super.viewDidLoad()
gradient = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = colors
view.layer.insertSublayer(gradient, at: 0)
}
在viewdide中出现
我正在枚举所有子层:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
for x in (view.layer.sublayers)! {
print(x)
}
}
这是我运行应用程序时得到的结果(这是正常的):
已从self.view中删除
CAGradientLayer
。我可以通过将代码从viewDidLoad
移动到viewDidAppear
来解决这个问题,但我想了解为什么在控制器被解除后,cagradintlayer
会被删除 我无法在一个简单的测试程序中重现您的情况
下面是一些调试建议
要找出从视图中删除渐变层的位置,请定义
class MyCAGradientLayer: CAGradientLayer {
deinit {
print("there it goes")
}
}
并将您的cagradintlayer
替换为mycagradintlayer
,它是在viewDidLoad
中本地创建的
override func viewDidLoad() {
super.viewDidLoad()
let gradient = MyCAGradientLayer()
gradient.frame = view.bounds
gradient.colors = colors
view.layer.insertSublayer(gradient, at: 0)
}
viewdiload
完成后,局部变量gradient
将释放对gradient
的引用,并且只有一个对gradient
的引用(在view.layers
数组中的引用)
在
print
语句上设置一个断点,以查看它被释放的位置。在调用super.viewdidispect(动画)
之前是否尝试过打印?如果我在viewwillappearded中打印,同样的问题将出现在您直接子类化UIViewController
?如何声明gradient
?你是如何解雇你的模态viewController的?@OrkhanAlikhanov:是的,我是UIViewController的子类
class MyCAGradientLayer: CAGradientLayer {
deinit {
print("there it goes")
}
}
override func viewDidLoad() {
super.viewDidLoad()
let gradient = MyCAGradientLayer()
gradient.frame = view.bounds
gradient.colors = colors
view.layer.insertSublayer(gradient, at: 0)
}