如何将UIView的背景颜色快速设置为渐变颜色?

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

我正在尝试使用以下代码迅速将按钮和标签的颜色设置为渐变颜色:

extension UIView {

    func setGradientColor(colorOne: UIColor, colorTwo: UIColor) {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
        gradientLayer.locations = [0.0,0.1]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0)
   }
}

然后在登录表单中,我使用如下扩展名:

let logo: UILabel = {
    let logo = UILabel()
    logo.text = "Logo"
    logo.setGradientColor(colorOne: UIColor.blue, colorTwo: UIColor.yellow)
    logo.textAlignment = .center
    logo.font = UIFont.boldSystemFont(ofSize: 59)
    return logo
}()

但它仍然显示为黑色。我该如何解决?

swift uiview cagradientlayer
2个回答
0
投票
您发布的内容我将...设置为徽标视图的框架或约束后,我打电话给... setGradietColor(colorOne: UIColor.blue, colorTwo: UIColor.yellow)

您可以在视图中添加渐变层

let gradient: CAGradientLayer = CAGradientLayer() gradient.colors = [UIColor.black.cgColor, UIColor.blue.cgColor] gradient.locations = [0.0 , 1.0] gradient.startPoint = CGPoint(x : 0.0, y : 0) gradient.endPoint = CGPoint(x :0.0, y: 0.5) // you need to play with 0.15 to adjust gradient vertically gradient.frame = view.bounds view.layer.addSublayer(gradient)

enter image description here

0
投票
您正面临此问题,因为当framegradientLayer更新时您没有更新boundslogo。例如,如果您可以引用gradientLayer,则可以在ViewController中提供此代码。

class ViewController: UIViewController { var gradient: CAGradientLayer? let logo: UILabel = { let logo = UILabel() logo.text = "Logo" gradient = logo.setGradietColor(colorOne: UIColor.blue, colorTwo: UIColor.yellow) logo.textAlignment = .center logo.font = UIFont.boldSystemFont(ofSize: 59) return logo }() override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() gradient?.frame = logo.bounds } }

尝试从方法中返回layer并按如下所示修改函数:

extension UIView { @discardableResult func setGradietColor(colorOne: UIColor, colorTwo: UIColor) { let gradientLayer = CAGradientLayer() gradientLayer.frame = bounds gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor] gradientLayer.locations = [0.0,0.1] gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0) gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0) layer.insertSublayer(gradientLayer, at: 0) return layer } }

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