Ios 手动将颜色从一种UIColor淡入另一种UIColor
我试图在Ios 手动将颜色从一种UIColor淡入另一种UIColor,ios,colors,drawrect,uicolor,cgcolor,Ios,Colors,Drawrect,Uicolor,Cgcolor,我试图在drawRect中将一个UIColor淡入另一个。我创建此函数是为了按一定百分比计算颜色: - (UIColor *)colorFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor percent:(float)percent { float dec = percent / 100.f; CGFloat fRed, fBlue, fGreen, fAlpha; CGFloat tRed, tBlue,
drawRect
中将一个UIColor
淡入另一个。我创建此函数是为了按一定百分比计算颜色:
- (UIColor *)colorFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor percent:(float)percent
{
float dec = percent / 100.f;
CGFloat fRed, fBlue, fGreen, fAlpha;
CGFloat tRed, tBlue, tGreen, tAlpha;
CGFloat red, green, blue, alpha;
if(CGColorGetNumberOfComponents(fromColor.CGColor) == 2) {
[fromColor getWhite:&fRed alpha:&fAlpha];
fGreen = fRed;
fBlue = fRed;
}
else {
[fromColor getRed:&fRed green:&fGreen blue:&fBlue alpha:&fAlpha];
}
if(CGColorGetNumberOfComponents(toColor.CGColor) == 2) {
[toColor getWhite:&tRed alpha:&tAlpha];
tGreen = tRed;
tBlue = tRed;
}
else {
[toColor getRed:&tRed green:&tGreen blue:&tBlue alpha:&tAlpha];
}
red = (dec * (tRed - fRed)) + fRed;
blue = (dec * (tGreen - fGreen)) + fGreen;
green = (dec * (tBlue - fBlue)) + fBlue;
alpha = (dec * (tAlpha - fAlpha)) + fAlpha;
return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}
这样做的目的是获取每个R/G/B/A值,并根据百分比增加该值
它可以正常工作,但不会正确地将[UIColor purpleColor]
褪色为[UIColor redColor]
。在0.1%时,它显示为绿色而不是紫色,因此它似乎从绿色变为红色,而不是从紫色变为红色
有人知道我做错了什么吗?这是错误的计算方法吗?有更准确的方法吗?在最后几行中,您的绿色和蓝色已经交换。swift的更新版本
import UIKit
extension UIColor {
// MARK: - UIColor+Percentage
class func colorForProgress(progress:CGFloat) -> UIColor {
var normalizedProgress = progress < 0 ? 0 : progress
normalizedProgress = normalizedProgress > 1 ? 1 : normalizedProgress
let R:CGFloat = 155.0 * normalizedProgress
let G:CGFloat = 155.0 * (1 - normalizedProgress)
let B:CGFloat = 0.0
return UIColor(red: R / 255.0, green: G / 255.0, blue: B / 255.0, alpha: 1)
}
class func transitionColor(fromColor:UIColor, toColor:UIColor, progress:CGFloat) -> UIColor {
var percentage = progress < 0 ? 0 : progress
percentage = percentage > 1 ? 1 : percentage
var fRed:CGFloat = 0
var fBlue:CGFloat = 0
var fGreen:CGFloat = 0
var fAlpha:CGFloat = 0
var tRed:CGFloat = 0
var tBlue:CGFloat = 0
var tGreen:CGFloat = 0
var tAlpha:CGFloat = 0
fromColor.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha)
toColor.getRed(&tRed, green: &tGreen, blue: &tBlue, alpha: &tAlpha)
let red:CGFloat = (percentage * (tRed - fRed)) + fRed;
let green:CGFloat = (percentage * (tGreen - fGreen)) + fGreen;
let blue:CGFloat = (percentage * (tBlue - fBlue)) + fBlue;
let alpha:CGFloat = (percentage * (tAlpha - fAlpha)) + fAlpha;
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
}
导入UIKit
扩展UIColor{
//标记:-UIColor+百分比
类func colorForProgress(progress:CGFloat)->UIColor{
var normalizedProgress=进度<0?0:进度
normalizedProgress=normalizedProgress>1?1:normalizedProgress
设R:CGFloat=155.0*normalizedProgress
设G:CGFloat=155.0*(1-标准化进度)
设B:CGFloat=0.0
返回UIColor(红色:R/255.0,绿色:G/255.0,蓝色:B/255.0,alpha:1)
}
类func transitionColor(fromColor:UIColor,toColor:UIColor,progress:CGFloat)->UIColor{
变量百分比=进度<0?0:进度
百分比=百分比>1?1:百分比
变量fRed:CGFloat=0
变量fBlue:CGFloat=0
变量fGreen:CGFloat=0
var fAlpha:CGFloat=0
变量树:CGFloat=0
变量tBlue:CGFloat=0
var tGreen:CGFloat=0
var tAlpha:CGFloat=0
getRed(&fRed,绿色:&fGreen,蓝色:&fBlue,alpha:&fAlpha)
toColor.getRed(&tRed,green:&tGreen,blue:&tBlue,alpha:&tAlpha)
让红色:CGFloat=(百分比*(tRed-fRed))+fRed;
设为绿色:CGFloat=(百分比*(tGreen-fGreen))+fGreen;
让蓝色:CGFloat=(百分比*(tBlue-fBlue))+fBlue;
设α:CGFloat=(百分比*(tAlpha-fAlpha))+fAlpha;
返回UIColor(红色:红色,绿色:绿色,蓝色:蓝色,alpha:alpha)
}
}
哦,天哪!这么多的红、绿、蓝。。。我还以为我把他们都搞定了呢!谢谢没问题。有时候你只需要多一双眼睛。