iOS宏用于设置颜色

时间:2013-12-12 15:19:09

标签: ios objective-c

我正在学习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]

我理解位和和或者东西,但我不知道这是如何转化为有效的颜色?

3 个答案:

答案 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.34f0.28f,{{ 1}}等。)

答案 1 :(得分: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不必是十六进制的。您可以像

一样使用它

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

答案 2 :(得分: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]接受的实际可接受值。