我希望在蓝色视图顶部有一个黄色视图会创建一个较小的绿色视图。 :d
UIView *blueView = [UIView new];
blueView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
blueView.alpha = 0.5;
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];
UIView *yellowView = [UIView new];
yellowView.frame = CGRectMake(40.0, 40.0, 100.0, 100.0);
yellowView.alpha = 0.5;
yellowView.backgroundColor = [UIColor yellowColor];
[self.view addSubview: yellowView];
但是,没有工作......有什么想法吗?
我也想将它用于圈子。
答案 0 :(得分:3)
颜色用RGB值表示(通常来自0-255
,因为每个组件只占用一个字节,但为了简单起见,我将在0-1
处代表它们。
当与其他颜色混合时,这些RGB值根据相应颜色的alpha值进行插值(它们是多么不透明)。 α值越大意味着对该给定颜色的权重越大。
因此,当第一次与白色背景混合时,黄色将结束:
(1, 1, 0) * 0.5 + (1, 1, 1) * 0.5 = (0.5, 0.5, 0) + (0.5, 0.5, 0.5) = (1, 1, 0.5)
现在,当蓝色与白色背景混合时,你会得到:
(0, 0, 1) * 0.5 + (1, 1, 1) * 0.5 = (0, 0, 0.5) + (0.5, 0.5, 0.5) = (0.5, 0.5, 1)
最后,将它们混合在一起时得到的颜色取决于您首先绘制的颜色。如果你首先绘制蓝色(就像你已经完成的那样),你将把未混合的黄色混合成蓝色:
(0.5, 0.5, 1) * 0.5 + (1, 1, 0) * 0.5 = (0.25, 0.25, 0.5) + (0.5, 0.5, 0) = (0.75, 0.75, 0.5)
的E w
您可以将青色(0, 1, 1)
和黄色(1, 1, 0)
与0.5
的字母组合在一起来实现此目的。
如果您在黄色之前添加青色,那么您最终会得到(0.75, 1, 0.5)
:
(0.5, 1, 0.75)
如果你在青色之前混合黄色:
然而,只要将两种颜色混合在一起,你就永远永远能够以(0, 1, 0)
的颜色结束(除非那些颜色是(0, 1, 0)
开始)。
If you look at the computer color gamut:
想象一下,在它上面挑选两种颜色,并在它们之间画一条直线。
此线表示通过将这两种颜色以不同的alpha加在一起,可以实现的不同颜色。
这表明除了绿色和绿色之外,这条线上没有两种颜色可以呈绿色。绿色。对于红色和蓝色也是如此,因为它们是色域的极值。
但是,您可能能够通过使用与普通添加剂混合模式不同的混合模式来实现您想要的结果。您可以使用CGContextSetBlendMode()
在Core Graphics中轻松完成此操作。 Have a look at the Core Graphics blend-mode docs.