ios – UIColor getHue:饱和度:亮度:alpha:返回NO

ios – UIColor getHue:饱和度:亮度:alpha:返回NO,第1张

概述我使用以下函数来“改变”UIColor的饱和度,亮度和alpha: //UIColor *color = [self color:[UIColor redColor] saturation:0.5 brightness:0.5 alpha:0.5];- (UIColor *)color:(UIColor *)color saturation:(CGFloat)saturation bright 我使用以下函数来“改变”UIcolor的饱和度,亮度和Alpha:

//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中的评论说:

If the receiver is of a compatible color space,any non-NulL
parameters are populated and ‘YES’ is returned. Otherwise,the
parameters are left unchanged and ‘NO’ is returned.

“兼容色彩空间”在这里意味着什么?我必须转换色彩空间吗?我该如何做到这一点?
我的.xcassets中的所有颜色都是sRGB.

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

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颜色空间创建颜色.

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)")        }    }}

这给出了输出:

kCGcolorSpaceModelRGB 0.5 0.7 0.3 1
Failed with color space (kCGcolorSpaceICCBased; kCGcolorSpaceModelRGB; sRGB IEC61966-2.1)

更新上面的代码以使用CGcolorSpace.extendedSRGB颜色空间可得到以下结果:

UIExtendedSRGBcolorSpace 0.5 0.7 0.3 1 0.25 0.571428571428571 0.7

总结

以上是内存溢出为你收集整理的ios – UIColor getHue:饱和度:亮度:alpha:返回NO全部内容,希望文章能够帮你解决ios – UIColor getHue:饱和度:亮度:alpha:返回NO所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1209615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存