2012-10-25 78 views
4

我曾經認爲[UIColor whiteColor]與[UIColor colorWithRed:1 green:1 blue:1 alpha:1]完全相同,但事實證明這不是!任何人都可以解釋嗎?關於UIColor,這是一個錯誤還是什麼?

CGFloat red1, green1, blue1, alpha1; 
UIColor * color1 = [UIColor whiteColor]; 
[color1 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1]; 
NSLog(@"%f, %f, %f, %f", red1, green1, blue1, alpha1); 

UIColor * color2 = [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; 
[color2 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1]; 
NSLog(@"%f, %f, %f, %f", red1, green1, blue1, alpha1); 

輸出:

0.000000, 0.000000, 0.000000, -1.998628 
1.000000, 1.000000, 1.000000, 1.000000 

這是酷..很如意的

回答

6

從文檔爲UIColor getRed:green:blue:alpha:

如果顏色是兼容的色彩空間中,顏色轉換爲RGB格式,並將其組件返回到您的應用程序。如果顏色不在兼容的顏色空間中,則參數不變。

[UIColor whiteColor]和用UIColor colorWithWhite:alpha:創建的灰度陰影來自與RGB色彩空間不同的色彩空間。因此它們不在兼容的顏色空間中。所以用這種顏色使用UIColor getRed:green:blue:alpha:是不合適的。

嘗試初始化4個CGFloat值並查看所得結果。如果你將它們都設置爲零,它們應該保持爲零。

+0

...和getRed:green:blue:alpha:也會返回NO。 – Adrian

相關問題