渐变层不在正确的位置

问题描述 投票:0回答:3

我有以下代码如下:

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()也不起作用。肯定有必要解决这个问题?

ios swift xcode cagradientlayer
3个回答
0
投票

你可以把这个块放进去:

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

0
投票

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

如果有人能解释一下,我会感兴趣吗?我在应用程序的另一部分有一个条形图,在viewDidAppear()中有代码来完成条形图,但是它有一个延迟填写。


0
投票

更改viewDidLayoutSubviews方法中的layer.frame属性。这是为了确保子视图(playView)已经有一个合适的帧。

© www.soinside.com 2019 - 2024. All rights reserved.