gpt4 book ai didi

iphone - UIView 中只有白色填充颜色是透明的

转载 作者:行者123 更新时间:2023-12-03 18:34:41 30 4
gpt4 key购买 nike

我有一个设置为 opaque = NOUIView,一切运行良好。在 drawRect 中,我正在执行自定义绘图,并且这有效

CGContextSetFillColor(context, CGColorGetComponents([UIColor blueColor].CGColor)); 
CGContextFillRect(context, labelOutside);
CGContextAddRect(context, labelOutside);

但是这个

CGContextSetFillColor(context, CGColorGetComponents([UIColor whiteColor].CGColor)); 
CGContextFillRect(context, labelOutside);
CGContextAddRect(context, labelOutside);

结果没有生成任何填充(您甚至可以通过它看到我在 CGContext 上绘制的其他内容)。如何绘制白色填充?

注意:如果我将控件设置为不透明,它仍然不起作用。

最佳答案

为什么不使用CGContextSetFillColorWithColor?然后,您可以直接传递 CGColor 对象,而不是提取其组件并假设它与上下文位于相同的颜色空间中。

编辑添加:

this works

CGContextSetFillColor(context, CGColorGetComponents([UIColor blueColor].CGColor)); 

but this

CGContextSetFillColor(context, CGColorGetComponents([UIColor whiteColor].CGColor)); 

results in NO fill being produced (you can even see other stuff that I drew on the CGContext through it).

正如我所提到的,这种设置填充颜色的方法假设颜色与上下文位于相同的颜色空间中。

通常,大多数 CGContext 都位于 RGB 颜色空间中。另一方面,whiteColor 几乎可以肯定处于白色空间中,该空间只有一个或两个(白色和 Alpha)分量。

因此,由于上下文位于 RGB 颜色空间中,CGContextSetFillColor 期望传递三个或四个(红色、绿色、蓝色和 alpha)分量。当您获取 whiteColor 的 CGColor 的组件时,您将获得一个指向仅包含两个组件的 C 数组的指针。 CGContextSetFillColor 无论如何都会读取它想要的三四个组件;如果你传递的较少,它可能会在它们后面找到垃圾,或者可能会找到零。

如果它在 Alpha 位置找到零,则结果是您已将填充颜色设置为黄色(红色 = 1.0、绿色 = 1.0、蓝色 = 0.0)和白色(所有三个 = 1.0)之间的颜色零阿尔法。这就是导致填充不显示的原因:您正在使用透明颜色进行填充。

问题在于上下文所在的颜色空间(具有三个或四个分量)与颜色所在的颜色空间(具有一个或两个分量)之间不匹配。解决方案是消除不匹配,这就是 CGContextSetFillColorWithColor 的作用:由于您传递的是整个 CGColor 对象,而不仅仅是数字数组,Core Graphics 将能够将上下文的颜色空间设置为该对象颜色对象并正确解释颜色对象的组成部分。

关于iphone - UIView 中只有白色填充颜色是透明的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3742971/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com