渐变层不在正确的位置

时间:2019-04-25 19:07:20

标签: ios swift xcode cagradientlayer

我有以下代码如下:

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()也不起作用。当然必须有解决的办法吗?

3 个答案:

答案 0 :(得分:0)

您可以在此块中放入

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
}

答案 1 :(得分:0)

viewDidAppear()有效。该屏幕是根控制器-我不知道这是否有所不同,但是应用渐变背景没有明显的延迟。

请问有人可以解释吗?我在应用程序的另一部分中有一个条形图,在viewDidAppear()中,有代码可以完成该条形图,但是填充它会有所延迟。

答案 2 :(得分:0)

更改viewDidLayoutSubviews内的layer.frame属性 方法。这是为了确保子视图(playView)已经具有适当的框架。