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

Posted

技术标签:

【中文标题】将渐变层添加到具有相同名称 Xcode/Swift 的所有按钮【英文标题】:Adding a Gradient Layer to all buttons with the same name Xcode/Swift 【发布时间】:2016-11-08 16:45:48 【问题描述】:

对于 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)

【问题讨论】:

你试过继承UIButton吗? 【参考方案1】:

您可以创建一个自定义类,以某种方式使用 Gradient 创建您的 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)
    

对于 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)
    

然后在按钮的检查器中,您可以将 Class 设置为 GradientButton 检查图像

这样你就不需要为你的渐变按钮编写代码了。

【讨论】:

感谢 Rajat,它完美运行!我现在遇到的问题是渐变层覆盖了按钮上的标题。知道如何让标题显示在渐变层上吗?还是有可能? 想通了,我自己添加了“self.layer.insertSublayer(gradientLayer, atIndex: 0)”代替了“self.layer.addSublayer(gradientLayer)”,效果很好:)

以上是关于将渐变层添加到具有相同名称 Xcode/Swift 的所有按钮的主要内容,如果未能解决你的问题,请参考以下文章

向导航栏添加渐变将隐藏 iOS 13.0 + 中的栏按钮项目

如何添加完全填充视图框架的渐变层

Pandas:使用多张工作表导入 xlsx,将列添加到每个 df 及其所属工作表的名称,将具有相同列数的 df 连接起来

在 UITableViewCell 中添加渐变隐藏 UILabel 文本

为啥我的渐变子层显示奇怪?

Xcode(Swift):我无法在视图控制器之间传输数据