2013-12-12 54 views
0

我正在学习iOS开发,并且发现了一个设置颜色的宏,但我不明白它是如何工作的。用于设置颜色的iOS宏

宏:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 

我了解一下,和或之类的东西,但我不知道如何转换为有效的颜色?

回答

4
UIColorFromRGB(0xrrggbb) 

rrggbb代表十六进制红色,绿色和蓝色值。

实施例:

UIColorFromRGB(0xff0000) 

上面的代码将返回一个红色UIColor

充分说明:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 
  1. #define UIColorFromRGB(rgbValue)

    定义工具宏从一个HTML风格的十六进制RGB颜色创建UIColor。例如:0xaf45ff

  2. (rgbValue & 0xFF0000)

    此位掩码提取从rgbValue红色值。在我们的例子中,这将导致0xaf0000

  3. rgbValue & 0xFF0000) >> 16

    这是用来的0xaf00000位转移的16个地方让我们0x0000af使...

  4. ((float)((rgbValue & 0xFF0000) >> 16))/255.0

    ...它可以通过255.0划分让我们的颜色中红色的百分比,如UIColor以百分比表示颜色(0.34f,0.28f,0.88f等)。

+0

但为什么位移>> 16等? – Haagenti

+1

'(rgbValue&0xFF00000)'会给红色“0xFF00000”。我们需要将其更改为'0x0000FF'或'255.0',以便可以接受'[UIColor colorWithRed:green:blue:alpha:]'方法。 – duci9y

+0

得到它谢谢你! 4分钟为正确答案 – Haagenti

0
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 

rgbValue不必hexadeximal。您可以使用它像

UIColorFromRGB(150)反过来它将执行

[UIColor colorWithRed:((float)((150 & 0xFF0000) >> 16))/255.0 green:((float)((150 & 0xFF00) >> 8))/255.0 blue:((float)(150 & 0xFF))/255.0 alpha:1.0] 

为了更好地理解逐位检查this

0

,你会使用它像任何普通的RGB值。

RGB值的格式是这样,RRGGBB

但这种说法(是rgbValue)需要在它前面的0X使其十六进制,

因此,你会用你的宏这样:

UIColorFromRGB(0xRRGGBB);UIColorFromRGB(0x653593);


#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0];

如果您的问题是关于了解((float)((rgbValue & 0xFF0000) >> 16))/255.0的工作原理,请稍微介绍一下。

首先我们注意到最后我们会将上半部分(分子)除以255.0。这是colorWithRed:green:blue:alpha:的标准做法,所以我们需要分子作为浮点数。所以我们把这个值作为float

让我们接下来评估(rgbValue & 0xFF00) >> 8。显然rgbValue是我们传递给函数的值。正如我们前面发现的那样,rgbValue的值实际上是十六进制的。第一部分,(rgbValue & 0xFF00)表示按位AND。然后>>按位移8位右边的位。作为回报,仅返回(在本例中)rgbValue变量的绿色值。之后,我们除以255.0并得到[UIColor colorWithRed:green:blue:alpha]接受的实际接受值。