2017-06-19 81 views
1

我遇到了涉及設置標籤和按鈕漸變的問題。我知道這個問題已經被問了很多,但沒有答案似乎解決了我的問題。這裏是屏幕,我希望它看起來: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應用程序) –

回答

1

有許多問題與您的代碼。

  • 鴻溝與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 
} 
1

哦,我的天啊,我有同樣的問題,但玩過它。這是因爲你沒有添加.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

是的,這工作謝謝 –

1

你的方法是這樣的:

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 
    }