[英]iOS macro for setting color
我正在學習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]
我理解位和和或者東西,但我不知道這是如何轉化為有效的顏色?
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
, 0.88f
等)。
#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]
為了更好地理解按位檢查這一點
你會像任何普通的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:
標准做法colorWithRed:green:blue:alpha:
所以我們需要分子為浮點數。 所以我們將值轉換為float
。
讓我們接下來評估(rgbValue & 0xFF00) >> 8
。 顯然rgbValue
是我們傳遞給函數的值。 正如我們之前發現的那樣, rgbValue
的值實際上是十六進制的。 第一部分(rgbValue和0xFF00)表示按位AND
。 然后>>
按位向右移位8位空格。 作為回報,僅返回(在本例中)rgbValue變量的綠色值。 之后我們除以255.0並獲得[UIColor colorWithRed:green:blue:alpha]
接受的實際可接受值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.