2016-11-08 29 views
0

因此,Xcode/Swift的新增功能,我在我的應用程序中的不同視圖控制器中爲一堆按鈕添加了漸變圖層。我想知道是否有辦法一次定位所有帶有特定名稱的按鈕,而不是將我的代碼分別添加到每個頁面中。這裏是我的梯度代碼:將漸變圖層添加到所有具有相同名稱的按鈕Xcode/Swift

let gradientLayer = CAGradientLayer() 
gradientLayer.frame = self.btnSavePhoto.bounds 

let color1 = UIColor(red:0.05, green:0.29, blue:0.49, alpha: 1.0).CGColor as CGColorRef 
let color2 = UIColor(red:0.08, green:0.23, blue:0.39, alpha: 1.0).CGColor as CGColorRef 

gradientLayer.colors = [color1, color2] 

gradientLayer.locations = [0.0, 1.0] 

self.btnSavePhoto.layer.addSublayer(gradientLayer) 
+2

你試過繼承'UIButton'嗎? – Eeshwar

回答

2

您可以用漸變讓你UIButton不知何故這樣

對於斯威夫特3

import UIKit 

public class GradientButton: UIButton { 

    override public func layoutSubviews() { 
     super.layoutSubviews() 
     layoutGradientButtonLayer() 
    } 

    // MARK: Private 
    private func layoutGradientButtonLayer() { 
     let gradientLayer = CAGradientLayer() 
     let color1 = UIColor(red:0.05, green:0.29, blue:0.49, alpha: 1.0).cgColor as CGColor 
     let color2 = UIColor(red:0.08, green:0.23, blue:0.39, alpha: 1.0).cgColor as CGColor 
     gradientLayer.colors = [color1, color2] 
     gradientLayer.locations = [0.0, 1.0] 
     self.layer.addSublayer(gradientLayer) 
    } 
} 

爲SWIFT 2.3

創建一個自定義類
import UIKit 

public class GradientButton: UIButton { 

    override public func layoutSubviews() { 
     super.layoutSubviews() 
     layoutGradientButtonLayer() 
    } 

    // MARK: Private 
    private func layoutGradientButtonLayer() { 
     let gradientLayer = CAGradientLayer() 
     let color1 = UIColor(red:0.05, green:0.29, blue:0.49, alpha: 1.0).CGColor as CGColorRef 
     let color2 = UIColor(red:0.08, green:0.23, blue:0.39, alpha: 1.0).CGColor as CGColorRef 
     gradientLayer.colors = [color1, color2] 
     gradientLayer.locations = [0.0, 1.0] 
     self.layer.addSublayer(gradientLayer) 
    } 
} 

然後在檢查器按鈕,可以設置以班級爲GradientButton檢查圖像

enter image description here

這樣你不需要寫代碼爲您的漸變按鈕。

+0

謝謝Rajat,它工作完美!我現在的問題是,漸變圖層覆蓋了按鈕上的標題。有關如何讓標題顯示在漸變圖層上的任何想法?或者甚至有可能? –

+1

想象它自己添加「self.layer.insertSublayer(gradientLayer,atIndex:0)」代替「self.layer.addSublayer(gradientLayer)」,它的工作完美:) –

相關問題