iOS開發UI篇--使用CAShapeLayer實現一個音量大小動態改
一、案例演示
最近在整理一個聊天的專案的時候,傳送圖片的時候,會有一個三角的指向效果,指向這張圖片的傳送者。服務端返回給我們的圖片只是一張矩形的圖片,我們如何把一張矩形的圖片或者View,加上一層自定義遮罩效果,就是本文要講的內容。效果演示如下:第一張是一個View的遮罩效果,第二張是UIImageView的遮罩效果。
這是一個我的iOS交流圈,群檔案自行下載,不管你是小白還是大牛熱烈歡迎進群 ,分享面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。——點選:
二、實現機制
在每一View的layer層中有一個mask屬性,他就是專門來設定該View的遮罩效果的。該mask本身也是一個layer層。我們只需要生成一個自定義的layer,然後覆蓋在需要遮罩的View上面即可。問題就歸於如何生成入上圖所示的不規則圖片的Layer。CAShapeLayer可以根據幾個點的依次連線,產生一個閉合空間的layer。如下圖所示:
三、實現程式碼
實現方式為實現了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
四、呼叫方式
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;
五、最後說一點
這是一個我的iOS交流圈,群檔案自行下載,不管你是小白還是大牛熱烈歡迎進群 ,分享面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。——點選:
如果覺得對你還有些用,就關注小編+喜歡這一篇文章。你的支援是我繼續的動力。
下篇文章預告:使用CAShapeLayer實現一個音量大小動態改變的控制元件
文章來源於網路,如有侵權,請聯絡小編刪除。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4692/viewspace-2818304/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS開發UI篇--使用UICollectionView實現一個傾斜列表效果iOSUIView
- iOS開發UI篇--使用UICollectionView實現一個列表頭部拉伸效果的案例iOSUIView
- ios 開發UI篇—UITextViewiOSUITextView
- iOS開發UI篇--一個支援圖文混排的ActionSheetiOSUI
- iOS動畫系列之八:使用CAShapeLayer繪畫動態流量圖iOS動畫
- iOS開發基礎篇--CAShapeLayer的strokeStart和strokeEnd屬性iOS
- iOS開發UI篇--一個側滑選單SlidingMenuiOSUI
- ios開發UI篇--UILabeliOSUI
- iOS開發UI篇--iOS動畫(Core Animation)總結iOSUI動畫
- iOS開發UI篇--UICollectionView初步入門iOSUIView
- iOS開發UI篇--仿射變(CGAffineTransform)使用小結iOSUIORM
- iOS開發UI篇--YXFilmSelectView(一個酷炫的電影選票View)iOSUIView
- 動手實現一個localcache - 實現篇
- 混合開發實戰:App里拉起一個小程式(IOS篇)APPiOS
- 探索AI驅動Web開發動態UIAIWebUI
- 實現控制元件的移動、改變大小(DELPHI實現) (轉)控制元件
- iOS開發UI篇——一個可擴充套件性極強的樹形控制元件iOSUI套件控制元件
- iOS BLE 開發小記[3] 如何實現一個 Local PeripheraliOS
- 動手實現一個localcache - 設計篇
- js實現的拖動改變視窗大小功能JS
- IOS 動態改變cell的高度iOS
- iOS 音量柱的實現(mic 採集的聲音DB反映成音量柱)iOS
- iOS使用GCD實現一個TimeriOSGC
- 開源 | 如何實現一個iOS AOP框架?iOS框架
- 最佳實踐(2):iOS開發篇iOS
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- iOS專案開發實戰——使用CoreLocation實現定位iOS
- iOS BLE 開發小記[2] 如何實現一個 Local CentraliOS
- 閒雲旅遊專案開發-(第一篇:使用Element-ui實現主頁輪播圖)UI
- Cordova - 使用Cordova開發iOS應用實戰1(配置、開發第一個應用)iOS
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- iOS專案開發實戰——使用UICollectionView實現瀑布流iOSUIView
- iOS 開發(一) 程式碼規範篇iOS
- iOS動手做一個直播(原理篇)iOS
- 一個利用windows api控制放音音量和錄音麥克風音量實現類(c++程式碼)WindowsAPIC++
- iOS開發-第一個AppiOSAPP
- iOS開發UI中懶載入的使用方法iOSUI
- iOS開發基礎篇--NSNotificationCenter使用小結iOS