有没有办法UIViews
用不同的背景颜色和 alpha 重叠 2 个或更多以给出另一种颜色的外观?例如,将红色UIView
放在蓝色之上UIView
以呈现单个洋红色的外观UIView
。
问问题
1459 次
4 回答
4
在 iOS 上,视图的唯一混合模式是所谓的“source over”模式。
基本上 RGB_result = RGB_back * (1 - Alpha_front) + RGB_front * Alpha_front
因此,在蓝色 (0, 0, 1) 视图之上具有 0.5 alpha 的红色 (1, 0, 0) 视图将导致深洋红色 (0.5, 0, 0.5)
如果您需要其他混合模式,请考虑使用 CoreGraphics 进行绘制(例如CGContextSetBlendMode
)
于 2013-10-01T13:29:51.850 回答
0
您可以像这样使用 alpha 属性:
UIView *redView = [[UIView alloc] initWithFrame: CGRectMake(0,0,20,20)];
redView.backgroundColor = [UIColor redColor];
UIView *blueView = [[UIView alloc] initWithFrame: CGRectMake(0,0,20,20)];
blueView.backgroundColor = [UIColor blueColor];
blueView.alpha = 0.5;
[redView addSubview: blueView];
请注意,通过使用 UIColor 的 RGB 创建方法手动获取所需的颜色,这在单个视图中更容易实现:
UIView *magentaView = [[UIView alloc] initWithFrame: CGRectMake(0,0,20,20)];
UIColor *magenta = [UIColor colorWithRed: 1
green: 0
blue: 1
alpha: 1];
magentaView.backgroundColor = magenta;
注意,RGB 值介于 0 和 1 之间(不是通常指定的标准 0 -> 255 范围)。alpha 值表示不透明度。
于 2013-10-01T13:26:27.490 回答
0
这给出了紫色视图,没问题。
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *view1 = [[UIView alloc] initWithFrame:self.view.bounds];
view1.backgroundColor = [UIColor colorWithRed:1.f green:0.f blue:0.f alpha:0.5f];
[self.view addSubview:view1];
view1 = [[UIView alloc] initWithFrame:self.view.bounds];
view1.backgroundColor = [UIColor colorWithRed:0.f green:0.f blue:1.f alpha:0.5f];
[self.view addSubview:view1];
}
于 2013-10-01T13:27:33.930 回答
0
以下方法对我有用
- (void)viewDidLoad {
[super viewDidLoad];
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeColor);
}
于 2015-07-02T20:18:58.790 回答