【发布时间】:2017-04-23 11:38:18
【问题描述】:
我正在创建一个渐变层并将其添加到我的MainViewControllerself.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 来解决这个问题,但我想了解为什么在控制器被解散后删除了CAGradientLayer。
【问题讨论】:
-
您在致电
super.viewDidAppear(animated)之前尝试过打印吗? -
如果我在 viewWillAppear 中打印也会出现同样的问题
-
你直接继承
UIViewController吗? -
gradient是如何声明的?你是如何关闭你的模态视图控制器的? -
@OrkhanAlikhanov:是的,我正在继承 UIViewController
标签: ios swift cagradientlayer