繁体   English   中英

UIColor 和 CGColor 之间的奇数转换

[英]Odd Conversion between UIColor and CGColor

所以这是我试图从 UIColor 转换为 CGColor 的 colors:

001385 - R:0 G:19 B:133

ca000b - R:202 G:0 B:11

这是 Blue 与 iOS 的渲染:a:在此处输入图像描述 乙:在此处输入图像描述

这是红色与 iOS 的渲染: <code>在此处输入图片描述</code> 乙:在此处输入图像描述

这是我用来转换 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM