ios - 在 Swift 中为按钮设置背景渐变

标签 ios swift button linear-gradients

我不知道如何在按钮上设置背景渐变(不使背景渐变成为图像)。这与 Android 有很大不同。

这是我必须定义可返回渐变方案的类:

import UIKit

extension CAGradientLayer {

    func backgroundGradientColor() -> CAGradientLayer {
        let topColor = UIColor(red: (0/255.0), green: (153/255.0), blue:(51/255.0), alpha: 1)
        let bottomColor = UIColor(red: (0/255.0), green: (153/255.0), blue:(255/255.0), alpha: 1)

        let gradientColors: [CGColor] = [topColor.CGColor, bottomColor.CGColor]
        let gradientLocations: [Float] = [0.0, 1.0]

        let gradientLayer: CAGradientLayer = CAGradientLayer()
        gradientLayer.colors = gradientColors
        gradientLayer.locations = gradientLocations

        return gradientLayer

    }
}

我可以使用它来设置我的整个 View 的背景:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let background = CAGradientLayer().backgroundGradientColor()
        background.frame = self.view.bounds
        self.view.layer.insertSublayer(background, atIndex: 0)
    }
    //...
}

但是我怎样才能访问按钮的 View 并插入子层或类似的东西呢?

最佳答案

您的代码运行良好。您只需要记住每次都设置渐变的框架。最好只让渐变类别也为您设置 View 的框架。

这样你就不会忘记,而且适用性很好。

import UIKit

extension UIView {

    func applyGradient(colours: [UIColor]) -> CAGradientLayer {
        return self.applyGradient(colours: colours, locations: nil)
    }


    func applyGradient(colours: [UIColor], locations: [NSNumber]?) -> CAGradientLayer {
        let gradient: CAGradientLayer = CAGradientLayer()
        gradient.frame = self.bounds
        gradient.colors = colours.map { $0.cgColor }
        gradient.locations = locations
        self.layer.insertSublayer(gradient, at: 0)
        return gradient
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var btn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.btn.applyGradient(colours: [.yellow, .blue])
        self.view.applyGradient(colours: [.yellow, .blue, .red], locations: [0.0, 0.5, 1.0])
    }


}

按钮是 View 。您可以像将其应用于任何其他 View 一样对其应用渐变。

图片证明: enter image description here

视频证明: https://i.imgur.com/ssDTqPu.mp4

关于ios - 在 Swift 中为按钮设置背景渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903124/

相关文章:

ios - 如何在 SwiftUI 中符合 ButtonStyle 协议(protocol)?

xcode - 将 XCTest 与 swift 一起使用时不会显示编译错误

javascript - 同一页面上有多个 Pin-it 按钮

javascript - 在 Firefox 中单击按钮关闭当前选项卡

swift - 进程(NSTask)fileHandleForReading readabilityHandler 闭包未在 Linux 上调用

java - Thread.sleep和隐藏按钮

iphone - 如何在 UIButton 中从正常状态和选定状态下的标题文本设置 UIImage

ios - Ionic v2 - 如何禁用弹出动画

仅 iOS 纵向应用程序从横向的 UIWebview youtube 返回

ios - 合并:像Future一样的发布者,但具有多个值(value)