我有以下代码如下:
playView.layer.cornerRadius = 16
let gradient1 = CAGradientLayer()
gradient1.frame = playView.frame
gradient1.cornerRadius = 16
if #available(iOS 10.0, *) {
// set P3 colour
} else {
// set sRGB colour
}
gradient1.startPoint = CGPoint(x: 0, y: 0)
gradient1.endPoint = CGPoint(x: 1, y: 1)
playView.layer.insertSublayer(gradient1, at: 0)
在上面代码块的第3行,我设置渐变的帧等于我想要填充的帧。
当我在不同设备上运行应用程序时,如果正在运行应用程序的设备是在Interface Builder中选择的设备,则渐变层将仅填充正确的区域。
我目前在viewDidLoad()中有代码,因此可以通过将代码移动到viewDidAppear()来解决问题,但是当加载应用程序时,在渐变出现之前会有一点延迟,不能给出平滑的外观感觉
是否有其他方法可以将代码放入,以便渐变显示在正确的位置,同时在用户看到屏幕的同时就在那里?或者,一种使渐变填充视图的方法,同时仍然将代码保存在viewDidLoad()中?
编辑:viewWillAppear()不起作用,viewWillLayoutSubviews()也不起作用。肯定有必要解决这个问题?
你可以把这个块放进去:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
}
viewDidAppear()有效。此屏幕是根控制器 - 我不知道这是否有所不同,但应用渐变背景没有明显的延迟。
如果有人能解释一下,我会感兴趣吗?我在应用程序的另一部分有一个条形图,在viewDidAppear()中有代码来完成条形图,但是它有一个延迟填写。
更改viewDidLayoutSubviews
方法中的layer.frame属性。这是为了确保子视图(playView)已经有一个合适的帧。