我使用下面的函數來 「改變」 的飽和度,亮度和α一個UIColor
的:的UIColor getHue:飽和度:亮度:阿爾法:返回NO
//UIColor *color = [self color:[UIColor redColor] saturation:0.5 brightness:0.5 alpha:0.5];
- (UIColor *)color:(UIColor *)color saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha {
CGFloat h, s, b, a;
[color getHue:&h saturation:&s brightness:&b alpha:&a];
return [UIColor colorWithHue:h saturation:(s * saturation) brightness:(b * brightness) alpha:(a * alpha)];
}
在此之前的iOS 11(GM),這是工作得很好。但是,現在[UIColor getHue:saturation:brightness:alpha:]
返回NO
並且hsba值未發生變化。
註釋在UIColor.h
說:
如果接收機是一個兼容色彩空間的,任何非空 參數被填充和「YES」被返回。否則, 參數保持不變,並返回「否」。
這裏「兼容色彩空間」是什麼意思?我必須轉換色彩空間嗎?我如何實現這一目標? 我的.xcassets中的所有顏色都是sRGB。
編輯:樣的修復方法是使用下面的方式來獲得HSBA值:
CGFloat rTemp, gTemp, bTemp, aTemp;
[color getRed:&rTemp green:&gTemp blue:&bTemp alpha:&aTemp];
CGFloat h, s, b, a;
[[UIColor colorWithRed:rTemp green:gTemp blue:bTemp alpha:aTemp] getHue:&h saturation:&s brightness:&b alpha:&a];
快速測試表明,如果在'UIColor'通過經由代碼,而不是從一個資產創建的代碼工作。 – rmaddy
@rmaddy是的,我也注意到了。但爲什麼這不適用於sRGB? –
我正要解釋這裏發生了什麼,以及如何繼續下去,但看起來你已經接受了一個答案。我建議讓你的問題有點憋悶。 – Mustang