3

有没有办法UIViews用不同的背景颜色和 alpha 重叠 2 个或更多以给出另一种颜色的外观?例如,将红色UIView放在蓝色之上UIView以呈现单个洋红色的外观UIView

4

4 回答 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 回答