HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – UIColor getHue:饱和度:亮度:alpha:返回NO大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用以下@L_450_0@来“改变”UIColor的饱和度,亮度和alpha:

@H_673_7@//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.

编辑:一种修复方法是使用以下方式获取HSBA值:

@H_673_7@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];

解决方法

如果颜色的颜色空间是sRGB,那么看起来UIColor getHue:saturation:brightness:方法不起作用,但如果颜色的颜色空间是扩展sRGB,它确实有效.

因此,解决方案是为颜色集资产中的每种颜色更新选定的颜色空间.

这可以在Swift Playground中演示如下.这将使用sRGB颜色空间创建颜色.

@H_673_7@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,请注明来意。