重叠不同颜色和Alpha的UIViews

时间:2013-10-01 13:09:35

标签: ios graphics uiview colors uikit

是否有办法将2个或更多UIViews与不同的背景颜色和alpha重叠,以提供另一种颜色的外观?例如,在蓝色UIView上方放置一个红色的UIView,以显示单个洋红色UIView的外观。

4 个答案:

答案 0 :(得分:3)

在iOS上,如果所谓的“来源过度”模式,则是视图的唯一混合模式。

基本上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

答案 1 :(得分: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值表示不透明度。

答案 2 :(得分: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];
}

答案 3 :(得分:0)

以下方法为我工作

- (void)viewDidLoad {
    [super viewDidLoad];
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeColor);
}