CALayer的屬性mask,mask也是一個(gè)layer涕蜂,這邊稱它為maskLayer。介紹中描述
An optional layer whose alpha channel is used to mask the layer’s content.
The layer’s alpha channel determines how much of the layer’s content and background shows through. Fully or partially opaque pixels allow the underlying content to show through but fully transparent pixels block that content.
maskLayer的alpha值決定其內(nèi)容和背景有多少顯示映琳。不透明和半透明的地方可以讓其內(nèi)容顯示机隙,透明的地方內(nèi)容不顯示;先舉個(gè)栗子??
test 1
- (void)setUpGradientLayerWithNotTransport
{
//創(chuàng)建一個(gè)view萨西,背景顏色是灰色
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
view.backgroundColor = [UIColor grayColor];
[self.view addSubview:view];
//采用CAGradientLayer實(shí)現(xiàn)顏色漸變有鹿,來測(cè)試是不是transport會(huì)讓內(nèi)容消失
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake((kScreenWidth - 100)/2,(kScreenHeight -100)/2 , 100, 100);
//設(shè)置三種顏色,黑谎脯、紅葱跋、透明
[gradientLayer setColors:[NSArray arrayWithObjects:
(id)[[UIColor blackColor] CGColor],
(id)[[UIColor redColor] CGColor],
(id)[[UIColor clearColor] CGColor],
nil]];
[gradientLayer setLocations:[NSArray arrayWithObjects:@0.0f, @0.5f, @1.0f, nil]];
gradientLayer.startPoint = CGPointMake(0, 0);
gradientLayer.endPoint = CGPointMake(0, 1.0f);
//設(shè)置view的mask
[view.layer setMask:gradientLayer];
}
運(yùn)行結(jié)果如下:
原本view是整個(gè)屏幕大小,背景是灰色穿肄;gradientLayer是屏幕中心一個(gè)100*100的正方形年局,其顏色值最后一個(gè)是[UIColor clearColor]
际看,alpha值為0咸产,而其余兩個(gè)顏色值alpha值為1,可以從圖中看到view只有中心一塊顯示仲闽,并且底部有白色漸變脑溢。
test 2
如果將gradientLayer的顏色換掉,替換代碼如下:
//設(shè)置三種顏色,黑屑彻、紅验庙、黃
[gradientLayer setColors:[NSArray arrayWithObjects:
(id)[[UIColor blackColor] CGColor],
(id)[[UIColor redColor] CGColor],
(id)[[UIColor clearColor] CGColor],
nil]];
運(yùn)行結(jié)果如下:
view只有中心一塊顯示,但是全是灰色社牲,沒有漸變粪薛,因?yàn)槿齻€(gè)顏色的alpha都為1,layer的內(nèi)容全部顯示搏恤。
test 3
讓結(jié)果更直觀可見违寿,可以選擇
gradientLayer.backgroundColor = [[UIColor colorWithRed:0.716 green:1.000 blue:0.536 alpha:0.3] CGColor];
//這邊不需要用gradientLayer;可以用普通Layer
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake((kScreenWidth - 100)/2,(kScreenHeight -100)/2 , 100, 100);
layer.backgroundColor = ([[UIColor colorWithRed:1.000 green:0.320 blue:0.608 alpha:0.259] CGColor]);
直接改變alpha通道熟空,可以發(fā)現(xiàn)layer的原內(nèi)容主體顏色不變藤巢,通透度變化,這邊插播一個(gè)xcode中方便選取顏色的插件ColorSense
注意點(diǎn)
The layer you assign to this property must not have a superlayer. If it does, the behavior is undefined.