CALayer的屬性mask,mask也是一個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值決定其內容和背景有多少顯示。不透明和半透明的地方可以讓其內容顯示,透明的地方內容不顯示;先舉個栗子??
test 1
- (void)setUpGradientLayerWithNotTransport
{
//創建一個view,背景顏色是灰色
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
view.backgroundColor = [UIColor grayColor];
[self.view addSubview:view];
//采用CAGradientLayer實現顏色漸變,來測試是不是transport會讓內容消失
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake((kScreenWidth - 100)/2,(kScreenHeight -100)/2 , 100, 100);
//設置三種顏色,黑、紅、透明
[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);
//設置view的mask
[view.layer setMask:gradientLayer];
}
運行結果如下:
原本view是整個屏幕大小,背景是灰色;gradientLayer是屏幕中心一個100*100的正方形,其顏色值最后一個是[UIColor clearColor]
,alpha值為0,而其余兩個顏色值alpha值為1,可以從圖中看到view只有中心一塊顯示,并且底部有白色漸變。
test 2
如果將gradientLayer的顏色換掉,替換代碼如下:
//設置三種顏色,黑、紅、黃
[gradientLayer setColors:[NSArray arrayWithObjects:
(id)[[UIColor blackColor] CGColor],
(id)[[UIColor redColor] CGColor],
(id)[[UIColor clearColor] CGColor],
nil]];
運行結果如下:
view只有中心一塊顯示,但是全是灰色,沒有漸變,因為三個顏色的alpha都為1,layer的內容全部顯示。
test 3
讓結果更直觀可見,可以選擇
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通道,可以發現layer的原內容主體顏色不變,通透度變化,這邊插播一個xcode中方便選取顏色的插件ColorSense
注意點
The layer you assign to this property must not have a superlayer. If it does, the behavior is undefined.