如何从UIColor获取RGB值?

我正在使用下面的代码创build一个颜色对象。

curView.backgroundColor = [[UIColor alloc] initWithHue:229 saturation:40 brightness:75 alpha:1]; 

如何从创build的颜色对象中检索RGB值?

 const CGFloat *colors = CGColorGetComponents( curView.backgroundColor.CGColor ); 

这些链接提供了更多的细节

  • UIColor参考
  • CGColorGetComponents引用

在iOS 5中,您可以使用:

 CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0; [multipliedColor getRed:&red green:&green blue:&blue alpha:&alpha]; 

SWIFT 3

我发现cgColor.components不会总是返回4个颜色值,所以我改变了这一点,所以它从CIColor包装

 extension UIColor { var redValue: CGFloat{ return CIColor(color: self).red } var greenValue: CGFloat{ return CIColor(color: self).green } var blueValue: CGFloat{ return CIColor(color: self).blue } var alphaValue: CGFloat{ return CIColor(color: self).alpha } } 

SWIFT 2

 extension UIColor { var red: CGFloat{ return CGColorGetComponents(self.CGColor)[0] } var green: CGFloat{ return CGColorGetComponents(self.CGColor)[1] } var blue: CGFloat{ return CGColorGetComponents(self.CGColor)[2] } var alpha: CGFloat{ return CGColorGetComponents(self.CGColor)[3] } } 

这不是最有效的方式,所以我不会去使用这个视图将不断重新绘制。

希望这会有所帮助

 CGFloat red, green, blue, alpha; //Create a sample color UIColor *redColor = [UIColor redColor]; //Call [redColor getRed: &red green: &green blue: &blue alpha: &alpha]; NSLog(@"red = %f. Green = %f. Blue = %f. Alpha = %f", red, green, blue, alpha); 

刚刚为此做了一个类别。

 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 

eppz!kit一部分,具有更多的UIColor好吃的东西 。

 const float* colors = CGColorGetComponents( curView.backgroundColor.CGColor ); 

谢谢。 我不得不在行的开头添加const ,因为它正在产生一个警告。

  UIColor *color = [[UIColor greenColor] retain]; //line 1 //OR(You will have color variable either like line 1 or line 2) color = curView.backgroundColor;//line 2 CGColorRef colorRef = [color CGColor]; int _countComponents = CGColorGetNumberOfComponents(colorRef); if (_countComponents == 4) { const CGFloat *_components = CGColorGetComponents(colorRef); CGFloat red = _components[0]; CGFloat green = _components[1]; CGFloat blue = _components[2]; CGFloat alpha = _components[3]; NSLog(@"%f,%f,%f,%f",red,green,blue,alpha); } [color release]; 

David Rees的Swift 3版本回答:

 extension UIColor { var redValue: CGFloat{ return cgColor.components! [0] } var greenValue: CGFloat{ return cgColor.components! [1] } var blueValue: CGFloat{ return cgColor.components! [2] } var alphaValue: CGFloat{ return cgColor.components! [3] } } 

从iOS 2.0开始, UIColor上有一个名为styleString的私有实例方法,它返回RGB或RGBAstring的颜色表示,即使对于RGB空间以外的颜色(如whiteColor)也是如此。

Objective-C的:

 @interface UIColor (Private) - (NSString *)styleString; @end // ... [[UIColor whiteColor] styleString]; // rgb(255,255,255) [[UIColor redColor] styleString]; // rgb(255,0,0) [[UIColor lightTextColor] styleString]; // rgba(255,255,255,0.600000) 

在Swift中,你可以使用桥头来暴露接口。 使用纯Swift,您将需要使用私有方法创build@objc协议,并使用协议创buildunsafeBitCast UIColor

 @objc protocol UIColorPrivate { func styleString() -> String } let white = UIColor.whiteColor() let red = UIColor.redColor() let lightTextColor = UIColor.lightTextColor() let whitePrivate = unsafeBitCast(white, UIColorPrivate.self) let redPrivate = unsafeBitCast(red, UIColorPrivate.self) let lightTextColorPrivate = unsafeBitCast(lightTextColor, UIColorPrivate.self) whitePrivate.styleString() // rgb(255,255,255) redPrivate.styleString() // rgb(255,0,0) lightTextColorPrivate.styleString() // rgba(255,255,255,0.600000) 

我想获得UITableViewStyle “UITableViewStyleGrouped”的背景颜色,所以在viewDidAppear:方法我添加了代码:

NSLog(@"%@", self.tableView.backgroundView.backgroundColor);

它做了我所期望的并返回了日志:

UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1

所以简而言之就是inputNSLog(@"%@", [UIColor whateverColor]);

使用HandyUIKit使这非常简单

 import HandyUIKit let color = UIColor(red: 0.1, green: 0.2, blue: 0.3, alpha: 0.4) // get any of the rgba values color.rgba.red // => 0.1 color.rgba.green // => 0.2 color.rgba.blue // => 0.3 color.rgba.alpha // => 0.4 

还有一个类似的选项来获取hsba

 let color = UIColor(hue: 0.1, saturation: 0.2, brightness: 0.3, alpha: 0.4) // you can get any of the hsba values, too color.hsba.hue // => 0.1 color.hsba.saturation // => 0.2 color.hsba.brightness // => 0.3 color.hsba.alpha // => 0.4 

只需使用迦太基安装它 ,你很好去。

我希望它有帮助!

像这样设置你的UIColor

 UIColor.FromRGB(128, 179, 255) 

这是Xamarin ios …但肯定有这样一个快速的方法。