Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将渐变层添加到具有相同名称Xcode/Swift的所有按钮_Ios_Swift_Xcode_Cagradientlayer - Fatal编程技术网

Ios 将渐变层添加到具有相同名称Xcode/Swift的所有按钮

Ios 将渐变层添加到具有相同名称Xcode/Swift的所有按钮,ios,swift,xcode,cagradientlayer,Ios,Swift,Xcode,Cagradientlayer,因此,Xcode/Swift新增了一个渐变层,我在我的应用程序的不同视图控制器中添加了一组按钮。我想知道是否有一种方法可以一次将所有按钮指定为一个特定的名称,而不是将我的代码单独添加到每个页面中。这是我的梯度代码: let gradientLayer = CAGradientLayer() gradientLayer.frame = self.btnSavePhoto.bounds let color1 = UIColor(red:0.05, green:0.29, blue:0.49, al

因此,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)

您可以创建一个自定义类,使您的
ui按钮具有如下梯度

适用于Swift 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)
    }
}
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)
    }
}
适用于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 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)
    }
}
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)
    }
}
然后在inspector for button中,您可以将类设置为GradientButton检查图像


这样,您就不需要为渐变按钮编写代码。

您可以创建一个自定义类,使您的
UIButton
具有如下渐变效果

适用于Swift 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)
    }
}
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)
    }
}
适用于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 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)
    }
}
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)
    }
}
然后在inspector for button中,您可以将类设置为GradientButton检查图像


这样,您就不需要为渐变按钮编写代码。

您是否尝试过子类化
UIButton
?您是否尝试过子类化
UIButton
?谢谢Rajat,它工作得非常完美!我现在的问题是渐变层覆盖了按钮上的标题。你知道如何让标题显示在渐变层上吗?或者这是可能的?我自己想出来了,添加了“self.layer.insertSublayer(gradientLayer,atIndex:0)”来代替“self.layer.addSublayer(gradientLayer)”,效果非常好:)谢谢Rajat,效果非常好!我现在的问题是渐变层覆盖了按钮上的标题。你知道如何让标题显示在渐变层上吗?或者这是可能的?我自己想出来了,添加了“self.layer.insertSublayer(gradientLayer,atIndex:0)”来代替“self.layer.addSublayer(gradientLayer)”,效果非常好:)