0. 所需条件
向设计师要一张所需渐变色的图片,我的是一枚 pdf 格式图片:
可能在我截图后这个渐变色不太明显,但它的确是渐变的。?
针对这个需求,我尝试了两种方法,第二种是我想要的。
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 的时候,会有如下效果:
可以看出,当点击开启 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)
}
}
复制代码
这样就得到了我们想要的效果:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END