我有以下代码如下:
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)
在上面的代码块的第三行,我将渐变的帧设置为希望填充的帧。
当我在其他设备上运行该应用程序时,如果正在运行该应用程序的设备是在Interface Builder中选择的设备,则渐变层将仅填充正确的区域。
我目前在viewDidLoad()中有代码,因此可以通过将代码移至viewDidAppear()来解决此问题,但是然后在加载应用程序时,渐变出现之前会稍有延迟,而不是光滑的外观。
是否可以使用另一种方法将代码放入其中,以便在正确的位置显示渐变,同时用户一看到屏幕就立即在其中?或者是一种使渐变填充视图的方法,同时仍将代码保留在viewDidLoad()中?
编辑:viewWillAppear()不起作用,viewWillLayoutSubviews()也不起作用。当然必须有解决的办法吗?
答案 0 :(得分:0)
您可以在此块中放入
:override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
}
答案 1 :(得分:0)
viewDidAppear()有效。该屏幕是根控制器-我不知道这是否有所不同,但是应用渐变背景没有明显的延迟。
请问有人可以解释吗?我在应用程序的另一部分中有一个条形图,在viewDidAppear()中,有代码可以完成该条形图,但是填充它会有所延迟。
答案 2 :(得分:0)
更改viewDidLayoutSubviews
内的layer.frame属性
方法。这是为了确保子视图(playView)已经具有适当的框架。