2016-11-08 20 views
0

Xcode/Swiftをnewして、アプリケーションの異なるView Controllerのボタンにグラデーションレイヤーを追加します。私は個々のページに個別にコードを追加するのではなく、すべてのボタンを特定の名前で一度にターゲットにする方法があるのだろうかと思います。ここに私の勾配コードは次のとおりです。同じ名前のすべてのボタンにグラデーションレイヤーを追加する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

あなたは何とかスウィフト2.3

については、この

スウィフト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) 
    } 
} 

のようなグラデーションを使用してUIButtonを作るためのカスタムクラスを作成することができます

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.addSublayer(gradientLayer)"の代わりに "self.layer.insertSublayer(gradientLayer、atIndex:0)"を追加してくれました。 –

関連する問題