重叠不同颜色和Alpha的UIViews

有没有办法重叠2个或更多的UIViews与不同的背景颜色和alphas给出另一种颜色的外观? 例如,在一个蓝色的UIView顶部放置一个红色的UIView ,以给出一个洋红色的UIView的外观。

在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

你可以像这样使用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创build方法手动获取所需的颜色,在单个视图中实现起来更容易:

 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值表示不透明度。

这给了一个紫色的看法,没有问题。

 - (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]; } 

下面的方法为我工作

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