前言:
还是在袁峥先生写的快速集成App中顶部标题滚动条这篇文章里, 有一个标题RGB 渐变的样式, 就是 label 上的文字从一种颜色随着进度(0%~100%) 变换到另一种颜色, OC 的代码转移到 Swift 里我不知道怎么写了,百度了一下,找到了另一种写法.
效果图:
变的原谅.gif
袁先生的代码:
OC
那么,作为一个愉快的 controlCV 工程师,该怎么做呢?
上代码!代码:
extension UIColor {
//获取某个颜色的 RGBA 值
func iNeedRBGA() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) {
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 0
getRed(&r, green: &g, blue: &b, alpha: &a)
return (r, g, b, a)
}
}
在 ViewController 里测试
我在 XIB 上拖了一个 Label(初始颜色随便弄一个) 和一个 Slider(初始值设置为0), 改写之后:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var llll: UILabel!
var oldcolor:(r: CGFloat,g: CGFloat,b: CGFloat,a: CGFloat)! = nil
var newcolor:(r: CGFloat,g: CGFloat,b: CGFloat,a: CGFloat)! = nil
override func viewDidLoad() {
super.viewDidLoad()
oldcolor = llll.textColor.iNeedRBGA()
newcolor = UIColor.green.iNeedRBGA();
}
@IBAction func aaaaa(_ sender: UISlider) {
let progress = CGFloat(sender.value)
let R = oldcolor.r + (newcolor.r - oldcolor.r) * progress
let G = oldcolor.g + (newcolor.g - oldcolor.g) * progress
let B = oldcolor.b + (newcolor.b - oldcolor.b) * progress
let A = oldcolor.a + (newcolor.a - oldcolor.a) * progress
llll.textColor = UIColor(red: R, green: G, blue: B, alpha: A)
}
}
感谢这位 iOS 玩家提供的灵感
iOS开发:根据颜色得到对应的RGB值