快速设置原生 UISwitch onTintColor 为渐变色

0. 所需条件

向设计师要一张所需渐变色的图片,我的是一枚 pdf 格式图片:

Screen Shot 2021-05-25 at 10.19.31 pm.png

可能在我截图后这个渐变色不太明显,但它的确是渐变的。?

针对这个需求,我尝试了两种方法,第二种是我想要的。

1. 不理想的代码

声明一个 UISwitch,并使用 UIColor(patternImage: UIImage) 设置其 onTintColor

lazy var onSwitch: UISwitch = {
    let gradientSwitch = UISwitch()
                
    if let image = UIImage(named: "switch-gradient-color") {
        gradientSwitch.onTintColor = UIColor(patternImage: image)
    }
        
    return gradientSwitch
}()
复制代码

这样,当你使用这个 UISwitch 的时候,会有如下效果:

May-25-2021 22-33-36.gif

可以看出,当点击开启 UISwitch 时,底色的确变成了我们想要的渐变色,但会有一点延时,我们想要的效果是,点击立马改变颜色。

2. 理想效果的代码

经过尝试,发现像下面这样设置 onTintColor,会得到理想的效果。

lazy var onSwitch: UISwitch = {
    let gradientSwitch = UISwitch()

    gradientSwitch.addTarget(self, action: #selector(switchPressed(sender:)), for: .valueChanged)
        
    return gradientSwitch
}()
复制代码
@objc func switchPressed(sender: UISwitch) {
    if let image = UIImage(named: "switch-gradient-color"), sender.isOn {
        sender.onTintColor = UIColor(patternImage: image)
    }
}
复制代码

这样就得到了我们想要的效果:

May-25-2021 22-42-46.gif

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享