大佬教程收集整理的这篇文章主要介绍了ios – UIColor getHue:饱和度:亮度:alpha:返回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中的评论说:
“兼容色彩空间”在这里意味着什么?我必须转换色彩空间吗?我该如何做到这一点?
我的.xCassets中的所有颜色都是sRGB.
CGFloat rTemp,gTemp,bTemp,aTemp; [color getRed:&rTemp green:&gTemp blue:&bTemp alpha:&aTemp]; CGFloat h,a; [[UIColor colorWithRed:rTemp green:gTemp blue:bTemp alpha:aTemp] getHue:&h saturation:&s brightness:&b alpha:&a];
因此,解决方案是为颜色集资产中的每种颜色更新选定的颜色空间.
这可以在Swift Playground中演示如下.这将使用sRGB颜色空间创建颜色.
if let cs = CGColorSpace(name: CGColorSpace.sRGB) { if let cc = CGColor(colorSpace: cs,components: [0.5,0.7,0.3,1.0]) { let color = UIColor(cgColor: cC) print(color) var h: CGFloat = 0 var s: CGFloat = 0 var b: CGFloat = 0 if color.getHue(&h,saturation: &s,brightness: &b,alpha: nil) { print(h,b) } else { print("Failed with color space \(cs)") } } }
这给出了输出:
更新上面的代码以使用CGColorSpace.extendedSRGB颜色空间可得到以下结果:
以上是大佬教程为你收集整理的ios – UIColor getHue:饱和度:亮度:alpha:返回NO全部内容,希望文章能够帮你解决ios – UIColor getHue:饱和度:亮度:alpha:返回NO所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。