每次离开应用程序然后再回来时,渐变都会变暗

问题描述

所以我在 UIView 子类的下半部分实现了一个简单的渐变,如下所示

enter image description here

但是,每次我离开应用程序并重新进入它时,渐变都会变暗,依此类推。我如何使它保持相同的阴影?

enter image description here

这是我的渐变代码。我不知道将它放在 layoutSubviews 中是否正确,但是我无法仅通过直接调用渐变代码来使其工作,例如在 viewDidLoad 中:

classmethod

解决方法

layoutSubviews() 被多次调用,因此您的渐变被重复添加。 layoutSubviews() 并不是真正添加此渐变的地方。在 viewDidLoad() 中添加它对您不起作用的原因是视图的 bounds 尚未建立。继续在 viewDidLoad() 中设置渐变。保留 gradient 作为属性,并使用 viewDidLayoutSubviews() 更新框架。

class ViewController: UIViewController {

    let gradientLayer = CAGradientLayer()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        gradientLayer.type = .axial
        gradientLayer.colors = [UIColor.clear.cgColor,UIColor.black.cgColor]
        gradientLayer.startPoint = CGPoint(x: 0,y: 0.5)
        gradientLayer.endPoint = .init(x: 0,y: 1)
        gradientLayer.zPosition = 1
        gradientLayer.opacity = 0.5
        view.layer.addSublayer(gradientLayer)
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        gradientLayer.frame = view.bounds
    }
}

对于作为 UIView 子类的视图,您可以这样处理:

class MyView: UIView {
    
    let gradientLayer = CAGradientLayer()

    override init(frame: CGRect) {
        super.init(frame: frame)
        addGradient()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        addGradient()
    }
    
    func addGradient() {
        gradientLayer.type = .axial
        gradientLayer.colors = [UIColor.clear.cgColor,y: 1)
        gradientLayer.zPosition = 1
        gradientLayer.opacity = 0.5
        layer.addSublayer(gradientLayer)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        gradientLayer.frame = bounds
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...