我正在学习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]
我理解位和和或者东西,但我不知道这是如何转化为有效的颜色?
答案 0 :(得分:4)
UIColorFromRGB(0xrrggbb)
rr
,gg
和bb
代表十六进制的红色,绿色和蓝色值。
示例:
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]
#define UIColorFromRGB(rgbValue)
定义用于从HTML样式的十六进制RGB颜色创建UIColor
的实用程序宏。示例:0xaf45ff
(rgbValue & 0xFF0000)
此位掩码从rgbValue
中提取红色值。在我们的示例中,这将导致0xaf0000
。
rgbValue & 0xFF0000) >> 16
这用于将0xaf00000
的位移动16位以获取0x0000af
以便...
((float)((rgbValue & 0xFF0000) >> 16))/255.0
...它可以除以255.0
以获取颜色中红色的百分比,因为UIColor
将颜色表示为百分比(0.34f
,0.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]
接受的实际可接受值。