簡體   English   中英

iOS宏用於設置顏色

[英]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)

其中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.28f0.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM