Swift - 使用渐变

Swift - 使用渐变

问题描述:

我遇到了涉及设置标签和按钮渐变的问题。我知道这个问题已经被问了很多,但没有答案似乎解决了我的问题。这里是屏幕,我希望它看起来:Swift - 使用渐变

enter image description here

这是我的代码:

@IBOutlet weak var loginButton: UIButton! 
    @IBOutlet weak var signUpButton: UIButton! 
    @IBOutlet weak var logoLabel: UILabel! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     loginButton.backgroundColor = UIColor.clear 
     let loginButtonGradient = createBlueGreenGradient(from: loginButton.bounds) 
     self.view.layer.insertSublayer(loginButtonGradient, at: 0) 

     signUpButton.backgroundColor = UIColor.clear 
     let signUpButtonGradient = createBlueGreenGradient(from: signUpButton.bounds) 
     self.view.layer.insertSublayer(signUpButtonGradient, at: 0) 

     logoLabel.backgroundColor = UIColor.clear 
     let logoLabelGradient = createBlueGreenGradient(from: logoLabel.bounds) 
     self.view.layer.insertSublayer(logoLabelGradient, at: 0) 

     loginButton.layer.cornerRadius = 100 
     signUpButton.layer.cornerRadius = 100 
    } 

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

    func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{ 
     let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1) 
     let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1) 
     let gradientColors: [UIColor] = [topColor, bottomColor] 

     let gradientLocations: [NSNumber] = [0.0, 1.0] 

     let gradientLayer = CAGradientLayer() 
     gradientLayer.colors = gradientColors 
     gradientLayer.locations = gradientLocations 
     gradientLayer.frame = bounds 

     return gradientLayer 
    } 

这是错误的结果:

enter image description here

有人请帮我。我不确定我做错了什么。

+0

[如何将渐变应用于iOS Swift App的背景视图](https:// stackoverflow。com/questions/24380535 /如何应用梯度背景视图的IOS - SWIFT应用程序) –

有许多问题与您的代码。

  • 鸿沟与Float号而不是Int颜色意味着它应该是255.0255
  • 现在为colorsCAGradientLayer属性您需要设置CGColor的数组而不是UIColor的数组。
  • 还设置startPointendPoint属性CAGradientLayer使水平渐变颜色。
  • 当前您将在您的self.view中添加此GradientLayer而不是其特定的按钮。
  • 还设置cornerRadius您还需要设置图层的masksToBounds属性true后设置的按钮cornerRadius其高度不的基础上与某个常数100
  • 现在为您的标志标签,你可以不设置textColorGradient颜色,你需要做的就是画上一个UIImage所需的梯度,然后使用该UIImage设置颜色模式为您Label检查这个SO reference为直接的东西。

使这一切后改变你的代码应该是这样的。

func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{ 
    let topColor = UIColor(red: 84/255.0, green: 183/255.0, blue: 211/255.0, alpha: 1).cgColor 
    let bottomColor = UIColor(red: 119/255.0, green: 202/255.0, blue: 151/255.0, alpha: 1).cgColor 
    let gradientColors = [topColor, bottomColor] 

    let gradientLocations: [NSNumber] = [0.0, 1.0] 
    let gradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations 
    //Set startPoint and endPoint property also 
    gradientLayer.startPoint = CGPoint(x: 0, y: 0) 
    gradientLayer.endPoint = CGPoint(x: 1, y: 0) 
    gradientLayer.frame = bounds 
    return gradientLayer 
} 

现在viewDidLoad这种方式设置gradientLayer

override func viewDidLoad() { 
    super.viewDidLoad() 

    let loginButtonGradient = createBlueGreenGradient(from: loginButton.bounds) 
    self.loginButton.layer.insertSublayer(loginButtonGradient, at: 0) 

    let signUpButtonGradient = createBlueGreenGradient(from: signUpButton.bounds) 
    self.signUpButton.layer.insertSublayer(signUpButtonGradient, at: 0) 

    loginButton.layer.cornerRadius = loginButton.frame.size.height/2 
    loginButton.layer.masksToBounds = true 
    signUpButton.layer.cornerRadius = signUpButton.frame.size.height/2 
    signUpButton.layer.masksToBounds = true 
} 

哦,我的天啊,我有同样的问题,但玩过它。这是因为你没有添加.cgcolor。例如:

let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1).cgColor 
let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1).cgColor 
let gradientColors = [topColor, bottomColor] 

让我知道它是否有效。

+0

是的,这工作谢谢 –

你的方法是这样的:

func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{ 
    let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1).cgColor 
    let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1).cgColor 
    let gradientColors = [topColor, bottomColor] 

    let gradientLocations: [NSNumber] = [0.0, 1.0] 

    let gradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations 
    gradientLayer.frame = bounds 

    return gradientLayer 
    }