2013-10-01 65 views
1

有沒有辦法重疊2個或更多UIViews與不同的背景顏色和阿爾法來給出另一種顏色的外觀?例如,在藍色UIView之上放置一個紅色UIView,以表示單品紅色UIView重疊UIViews的不同顏色和阿爾法

+0

你也可以用IB來做,很簡單:http://stackoverflow.com/questions/5795688/iphone-create-a-semi-transparent-rectangle-with-opaque-text – Daniel

回答

2

在iOS上,如果所謂的「源代碼結束」模式,視圖是唯一的混合模式。

基本上RGB_result = RGB_back *(1 - Alpha_front)+ RGB_front * Alpha_front

因此紅(1,0,0)與在藍色的頂0.5阿爾法圖(0,0,1)的視圖將結果在暗紅色(0.5,0,0.5)

如果你需要一些其他的混合模式,考慮與CoreGraphics中繪製(如CGContextSetBlendMode

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

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

下面的方法爲我工作

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