Swift 将UIButton的背景设置为CAGradientLayer

Swift 将UIButton的背景设置为CAGradientLayer,swift,xcode,Swift,Xcode,如何将UIButton的背景设置为CAGradientLayer 我尝试了以下方法: func applyGradientcolors:[UIColor],位置:[NSNumber]?->空虚{ let渐变:CAGradientLayer=CAGradientLayer gradient.frame=self.bounds gradient.colors=colors.map{$0.cgColor} 梯度。位置=位置 self.layer.insertSublayergradient,位于:0

如何将UIButton的背景设置为CAGradientLayer

我尝试了以下方法:

func applyGradientcolors:[UIColor],位置:[NSNumber]?->空虚{ let渐变:CAGradientLayer=CAGradientLayer gradient.frame=self.bounds gradient.colors=colors.map{$0.cgColor} 梯度。位置=位置 self.layer.insertSublayergradient,位于:0 } 这是我从

然后使用它:

让开始按钮:UIButton={ let button=ui按钮类型:。系统 button.setTitleGet已启动,用于:。正常 button.setTitleColorAppSettings.PURPL_颜色,用于:。正常 button.titleLabel?.font=UIFontname:Rubik中等,大小:16.0 返回按钮 } startButton.ApplyGradientColor:[.红色,.蓝色],位置:无 另外,我将按钮的宽度设置为视图的宽度,高度设置为50

然而,当我运行它时,我得到的是:

未应用背景渐变。

调用方法applyGradient时,按钮的边界将为0。因此,创建一个UIButton子类,并在layoutSublayers方法中更改渐变层框架

并使用颜色和位置值创建按钮

let button = GradientButton([.red,.blue], locations: nil)

谢谢,我宁愿只使用UIButton。在viewDidLayoutSubviews中应用渐变可以吗?@OmarHashim是的。调用startButton.ApplyGradientColor:[.red、.blue],位置:中为零viewDidLayoutSubviews@OmarSinan但viewDidLayoutSubviews方法在视图控制器中被多次调用。每次调用applyGradient方法时,它都会添加一个新层。考虑使用UBITCON子类或保持对RealthLealOOH的引用,我没有想到这一点。谢谢你的提醒!
let button = GradientButton([.red,.blue], locations: nil)