話不多說测砂,劃重點(diǎn)这刷。
/************************************從這里開始****************************************/
1.mask 是CALayer的一個(gè)屬性,同時(shí)也是CALayer 類型的鼻弧。
2.原理:控制layer本身渲染的一個(gè)layer设江。效果是:比如imageLayer有一個(gè)maskLayer作為mask(注意maskLayer可以不跟imageLayer大小一樣),那maskLayer透明的地方温数,imageLayer就不會(huì)渲染绣硝,而是變透明蜻势,顯示出imageLayer之后的內(nèi)容撑刺,maskLayer不透明的地方,imageLayer就會(huì)正常渲染握玛,顯示出imageLayer本來的內(nèi)容如果maskLayer比imageLayer要小够傍,那默認(rèn)的maskLayer之外的地方都是透明的甫菠,都不會(huì)渲染。?
3.mask 的作用就是讓父圖層部分區(qū)域可見冕屯。
4.mask 的backgroundColor必須設(shè)置寂诱,不設(shè)置mask 背景就是透明的,mask 是不會(huì)起作用的安聘,但是backgroundColor設(shè)置什么顏色無所謂痰洒。
5.為一個(gè)layer的mask 創(chuàng)建一個(gè)新的mask時(shí),這個(gè)新的mask不能有superlayer 和sublayer浴韭。(官方文檔的說明)
6.mask 可以配合CAGradientLayer丘喻、CAShapeLayer 使用∧罹保可以實(shí)現(xiàn)蒙層透明度泉粉、顯示不同形狀圖層、圖案鏤空榴芳、文字變色等等功能嗡靡。
7.mask在動(dòng)畫中使用,可以產(chǎn)生很好的動(dòng)畫效果窟感。
/*************************************在這里結(jié)束***********************************/
I讨彼、下面就展示一下mask 最基本的用法:
核心代碼部分如下:
II、下面展示的是和CAShapeLayer結(jié)合使用的情況
- (UIView*)shapeView
{
? ? if(_shapeView==nil) {
? ? ? ? _shapeView = [[UIView alloc] initWithFrame:CGRectMake(50, 200, UIScreen.mainScreen.bounds.size.width - 50*2, 200)];
? ? ? ? _shapeView.backgroundColor = UIColor.grayColor;
? ? ? ? CAShapeLayer *shapeLayer = [CAShapeLayer layer];
? ? ? ? UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:_shapeView.bounds];
? ? ? ? shapeLayer.path= bezierPath.CGPath;
? ? ? ? shapeLayer.strokeStart=0.0;
? ? ? ? shapeLayer.strokeEnd=1.0;
? ? ? ? shapeLayer.fillColor = UIColor.orangeColor.CGColor;
? ? ? ? shapeLayer.lineWidth=1.5;
? ? ? ? [_shapeView.layeraddSublayer:shapeLayer];
? ? ?//? ?_shapeView.layer.mask= shapeLayer;? ? ?>>>>>>>>>>>>>>>>>>>>>AAA行
? ? }
? ? return _shapeView;
}
上面這段代碼就是mask 和 CAShapeLayer 結(jié)合使用的簡(jiǎn)單示例:
上面代碼AAA行注釋掉的情況
上面代碼AAA沒有注釋掉的情況:
通過這兩張圖對(duì)比可以看出mask 和shapeLayer結(jié)合使用肌括,可以在父圖層上顯示你想要的圖形点骑,而父圖層的其它部分,則被隱去了谍夭。
III黑滴、擴(kuò)展
使用layer的mask屬性實(shí)現(xiàn)注水動(dòng)畫效果
mask和shapeLayer 結(jié)合 實(shí)現(xiàn)的圓形動(dòng)畫加載