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篇--一個側滑選單SlidingMenuiOSUI
- iOS開發基礎篇--CAShapeLayer的strokeStart和strokeEnd屬性iOS
- iOS開發UI篇--iOS動畫(Core Animation)總結iOSUI動畫
- ios 開發UI篇—UITextViewiOSUITextView
- iOS開發UI篇--一個支援圖文混排的ActionSheetiOSUI
- 用js實現動態改變根元素字型大小的方法JS
- iOS開發UI篇--仿射變(CGAffineTransform)使用小結iOSUIORM
- iOS開發UI篇--YXFilmSelectView(一個酷炫的電影選票View)iOSUIView
- iOS開發UI篇--UICollectionView初步入門iOSUIView
- iOS使用GCD實現一個TimeriOSGC
- 動手實現一個localcache - 實現篇
- 混合開發實戰:App里拉起一個小程式(IOS篇)APPiOS
- iOS開發UI篇——一個可擴充套件性極強的樹形控制元件iOSUI套件控制元件
- IOS 動態改變cell的高度iOS
- 動畫-CAShapeLayer實現QQ訊息紅點拖拽效果動畫
- iOS 音量柱的實現(mic 採集的聲音DB反映成音量柱)iOS
- 探索AI驅動Web開發動態UIAIWebUI
- iOS BLE 開發小記[2] 如何實現一個 Local CentraliOS
- iOS BLE 開發小記[3] 如何實現一個 Local PeripheraliOS
- 開源 | 如何實現一個iOS AOP框架?iOS框架
- 使用Netty和動態代理實現一個簡單的RPCNettyRPC
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- 動手實現一個localcache - 設計篇
- 閒雲旅遊專案開發-(第一篇:使用Element-ui實現主頁輪播圖)UI
- iOS動手做一個直播(原理篇)iOS
- iOS開發基礎篇--NSNotificationCenter使用小結iOS
- iOS動態庫的使用iOS
- XE 畫矩形實現拖拉改變大小(屬性)
- iOS 元件化開發(四):fastlane實現pod自動化iOS元件化AST
- iOS開發 - 動畫實踐系列iOS動畫
- Flutter混合開發—iOS篇FlutteriOS
- 改@使用者功能為動態
- 直播軟體開發,通過js動態設定字型大小JS
- 小影片軟體開發,實現一個CSS邊框動畫CSS動畫
- iOS開發之使用Git的基本使用(一)iOSGit
- iOS使用核心的50行程式碼實現一個路由元件iOS行程路由元件