IOS如何使用CAShapeLayer實(shí)現(xiàn)復(fù)雜的View的遮罩效果
一、案例演示
最近在整理一個(gè)聊天的項(xiàng)目的時(shí)候,發(fā)送圖片的時(shí)候,會(huì)有一個(gè)三角的指向效果,指向這張圖片的發(fā)送者。服務(wù)端返回給我們的圖片只是一張矩形的圖片,我們?nèi)绾伟岩粡埦匦蔚膱D片或者View,加上一層自定義遮罩效果,就是本文要講的內(nèi)容。效果演示如下:第一張是一個(gè)View的遮罩效果,第二張是UIImageView的遮罩效果。

二、實(shí)現(xiàn)機(jī)制
在每一View的layer層中有一個(gè)mask屬性,他就是專門來設(shè)置該View的遮罩效果的。該mask本身也是一個(gè)layer層。我們只需要生成一個(gè)自定義的layer,然后覆蓋在需要遮罩的View上面即可。問題就歸于如何生成入上圖所示的不規(guī)則圖片的Layer。CAShapeLayer可以根據(jù)幾個(gè)點(diǎn)的依次連線,產(chǎn)生一個(gè)閉合空間的layer。如下圖所示:

三、實(shí)現(xiàn)代碼
實(shí)現(xiàn)方式為實(shí)現(xiàn)了CAShapeLayer的ViewMask的Category。
@implementation CAShapeLayer (ViewMask)
+ (instancetype)createMaskLayerWithView : (UIView *)view{
CGFloat viewWidth = CGRectGetWidth(view.frame);
CGFloat viewHeight = CGRectGetHeight(view.frame);
CGFloat rightSpace = 10.;
CGFloat topSpace = 15.;
CGPoint point1 = CGPointMake(0, 0);
CGPoint point2 = CGPointMake(viewWidth-rightSpace, 0);
CGPoint point3 = CGPointMake(viewWidth-rightSpace, topSpace);
CGPoint point4 = CGPointMake(viewWidth, topSpace);
CGPoint point5 = CGPointMake(viewWidth-rightSpace, topSpace+10.);
CGPoint point6 = CGPointMake(viewWidth-rightSpace, viewHeight);
CGPoint point7 = CGPointMake(0, viewHeight);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:point1];
[path addLineToPoint:point2];
[path addLineToPoint:point3];
[path addLineToPoint:point4];
[path addLineToPoint:point5];
[path addLineToPoint:point6];
[path addLineToPoint:point7];
[path closePath];
CAShapeLayer *layer = [CAShapeLayer layer];
layer.path = path.CGPath;
return layer;
}
@end
四、調(diào)用方式
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(40, 50, 80, 100)]; view.backgroundColor = [UIColor orangeColor]; [self.view addSubview:view]; CAShapeLayer *layer = [CAShapeLayer createMaskLayerWithView:view]; view.layer.mask = layer;
作者:yixiangboy
地址:http://blog.csdn.net/yixiangboy/article/details/50485250
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)IOS程序設(shè)計(jì)有所幫助。
- iOS開發(fā)之路--仿網(wǎng)易抽屜效果
- iOS毛玻璃效果的實(shí)現(xiàn)及圖片模糊效果的三種方法
- IOS等待時(shí)動(dòng)畫效果的實(shí)現(xiàn)
- iOS開發(fā)中的ViewController轉(zhuǎn)場(chǎng)切換效果實(shí)現(xiàn)簡(jiǎn)介
- iOS開發(fā)之使用Storyboard預(yù)覽UI在不同屏幕上的運(yùn)行效果
- iOS開發(fā)中視圖的下拉放大和上拉模糊的效果實(shí)現(xiàn)
- IOS實(shí)現(xiàn)圖片輪播無限循環(huán)效果
- iOS實(shí)現(xiàn)圖片輪播效果
- iOS實(shí)現(xiàn)簡(jiǎn)單的抽屜效果
- iOS實(shí)現(xiàn)選項(xiàng)卡效果的方法
相關(guān)文章
ios實(shí)現(xiàn)app強(qiáng)制更新功能
本篇文章主要介紹了ios實(shí)現(xiàn)app強(qiáng)制更新功能,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
iOS開發(fā)商品頁中banner中點(diǎn)擊查看圖片
本文文章給大家列出了關(guān)于iOS開發(fā)商品頁中banner中點(diǎn)擊查看圖片功能源碼,有興趣的朋友參考下吧。2018-02-02
iOS開發(fā)輸入自動(dòng)填充UITextField背景色
如何在iOS中實(shí)現(xiàn)輸入時(shí)自動(dòng)填充背景色的效果,首先,我們?cè)O(shè)置UITextField的背景色為初始顏色,然后,通過設(shè)置UITextField的代理,并監(jiān)聽UITextField的輸入事件,我們?cè)谟脩糸_始輸入時(shí)將其背景色改變?yōu)楦吡令伾?在用戶結(jié)束輸入時(shí)恢復(fù)為初始顏色2023-10-10
IOS正則表達(dá)式之驗(yàn)證密碼身份證手機(jī)號(hào)
這篇文章主要介紹了IOS正則表達(dá)式之驗(yàn)證密碼身份證手機(jī)號(hào)的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10
xcode8提交ipa失敗無法構(gòu)建版本問題的解決方案
xcode升級(jí)到xcode8后發(fā)現(xiàn)構(gòu)建不了新的版本。怎么解決呢?下面小編給大家?guī)砹藊code8提交ipa失敗無法構(gòu)建版本問題的解決方案,非常不錯(cuò),一起看看吧2016-10-10
iOS 標(biāo)簽Tag列表的實(shí)現(xiàn)代碼
這篇文章主要介紹了本篇文章主要介紹了iOS 標(biāo)簽Tag列表的實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
iOS實(shí)現(xiàn)帶動(dòng)畫的環(huán)形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)帶動(dòng)畫的環(huán)形進(jìn)度條,同時(shí)帶數(shù)字同步效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01

