我想知道蓝色的值。我应该如何从UIColor中获取它?
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]);
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
*/
刚刚为此创建了一个类别。
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
的一部分。