[英]Odd Conversion between UIColor and CGColor
所以这是我试图从 UIColor 转换为 CGColor 的 colors:
这是 Blue 与 iOS 的渲染:a: 乙:
这是红色与 iOS 的渲染: 乙:
这是我用来转换 colors 的代码:红色:
[[UIColor colorWithRed:202 green:0 blue:11 alpha:1] CGColor]
蓝色的:
[[UIColor colorWithRed:0 green:19 blue:133 alpha:1] CGColor]
有谁知道我做错了什么?
您需要将参数除以255.0。 如@Duncan C所述,请确保除以255.0
[[UIColor colorWithRed:202.0/255.0 green:0 blue:11/255.0 alpha:1] CGColor]
[[UIColor colorWithRed:0 green:19/255.0 blue:133/255.0 alpha:1] CGColor]
一个方便的类别添加到UIColor:
然后你可以这样做: [UIColor R:0 G:19 B:133]
@interface UIColor (RGB)
+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b;
+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b A:(CGFloat)a;
@end
@implementation UIColor (RGB)
+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b {
return [self R:r G:g B:b A:1.0];
}
+(UIColor*)R:(NSUInteger)r G:(NSUInteger)g B:(NSUInteger)b A:(CGFloat)a {
return [UIColor colorWithRed:((CGFloat)r)/255.0 green:((CGFloat)g)/255.0 blue:((CGFloat)b)/255.0 alpha:a];
}
@end
从 iOS 5 开始,可以使用UIColor 的getRed(_:green:blue:alpha)
方法(这里用 Swift 显示):
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
let color = UIColor.systemGreen
// getRed(_:green:blue:alpha) returns 'true' on successful conversion
if color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
{
print("red: \(red)\ngreen: \(green)\nblue: \(blue)\nalpha: \(alpha)")
}
/*
which for `systemGreen` in light mode prints:
red: 0.20392156862745098
green: 0.7803921568627451
blue: 0.34901960784313724
alpha: 1.0
*/
并且,作为UIColor
扩展中的计算属性:
extension UIColor {
var rgbaComponents: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return (red, green, blue, alpha)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.