如何访问UIColor的颜色成分?

4
我想知道蓝色的值。我应该如何从UIColor中获取它?
4个回答

6

UIColor类不提供有关颜色组件的信息。您必须从其CGColor中获取组件。请注意,组件数取决于在CGColorRef中使用的颜色空间。

此代码打印蓝色的组件:

UIColor* color = [UIColor blueColor];
int n = CGColorGetNumberOfComponents(color.CGColor);
const CGFloat *coms = CGColorGetComponents(color.CGColor);
for (int i = 0; i < n; ++i)
    NSLog(@"%f", coms[i]);

更多背景信息请参考以下有用的链接:http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars - Jim

0
这是一个使用UIColor的计算属性的Swift扩展,其中使用了getRed(_:green:blue:alpha)方法(自iOS 5以来可用;此代码已在Xcode 13.3和iOS 12+上进行了测试)。
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)
    }

}

使用示例:

let purple = UIColor.systemPurple
print("purple.cgColor: \(purple.cgColor)")

let components = purple.rgbaComponents
print("components: \(components)")

print("red: \(components.red)")
print("green: \(components.green)")
print("blue: \(components.blue)")
print("alpha: \(components.alpha)")

/* prints--
purple.cgColor: <CGColor 0x2813cafa0> [<CGColorSpace 0x2813d4060> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0.686275 0.321569 0.870588 1 )
components: (red: 0.6862745098039216, green: 0.3215686274509804, blue: 0.8705882352941177, alpha: 1.0)
red: 0.6862745098039216
green: 0.3215686274509804
blue: 0.8705882352941177
alpha: 1.0
*/

0

刚刚为此创建了一个类别。

NSLog(@"%f", [UIColor blueColor].blue); // 1.000000

大致意思是:

typedef enum { R, G, B, A } UIColorComponentIndices;

@implementation UIColor (EPPZKit)

-(CGFloat)red
{ return CGColorGetComponents(self.CGColor)[R]; }

-(CGFloat)green
{ return CGColorGetComponents(self.CGColor)[G]; }

-(CGFloat)blue
{ return CGColorGetComponents(self.CGColor)[B]; }

-(CGFloat)alpha
{ return CGColorGetComponents(self.CGColor)[A]; }

@end

包含更多UIColor好东西eppz!kit的一部分。


0
今天早上我刚好在查找这个问题。我不知道为什么UIColor相对于NSColor来说如此不完整。无论如何,我发现了一个有用的UIColor类别:访问UIColor组件

很遗憾,Github上的代码已经过时了,开发者也没有回应错误报告;这是一个不错的分类。 - TigerCoding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接