關於圓角的5種處理方式
說明: 改造之前的圓角處理方式,新增加了兩種,由於之前直接使用預設的富文字編輯,沒有設定成Markdown編輯器,之前寫的不能切換Markdown格式,所以只能再次重新在此新增了。
原效果 -> 改造後效果


1>無需任何程式碼直接在xib中實現:
只需要如下圖中的幾步即可實現效果:
其中的第4步
Key Path:layer.cornerRadius
type:Number
Value:20(寬的一半 例如:原圖寬為40)

2>程式碼實現:
// _header.clipsToBounds = YES;(_header就是圖片的名稱)
// _header.layer.cornerRadius = 20;
3>使用CAShapeLayer和UIBezierPath設定圓角
//設定圖片的尺寸大小
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
//設定圖片
imageView.image = [UIImage imageNamed:@"Snip20160726_2"];
CGSize radio = CGSizeMake(5, 5);//圓角尺寸
UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight|UIRectCornerBottomLeft|UIRectCornerBottomRight;//設定圓角位置
/**
* bezierPathWithRoundedRect:imgViewd的大小
byRoundingCorners:設定圓角的位置(左上、左下、右上、右下)
cornerRadii:設定圓角尺寸
*/
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:corner cornerRadii:radio];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
//設定大小
maskLayer.frame = imageView.bounds;
//設定圖形樣子
maskLayer.path = maskPath.CGPath;
imageView.layer.mask = maskLayer;
[self.view addSubview:imageView];
4>使用貝塞爾曲線UIBezierPath和Core Graphics框架畫圓
//設定圖片的尺寸大小
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
//設定圖片
imageView.image = [UIImage imageNamed:@"Snip20160726_2.png"];
//開始對imageView進行畫圖
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
//使用貝塞爾曲線畫出一個圓形圖
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];
[imageView drawRect:imageView.bounds];
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
//結束畫圖
UIGraphicsEndImageContext();
[self.view addSubview:imageView];
5>封裝
直接匯入標頭檔案即可直接呼叫:github送上門

Snip20160810_2.png
總結
:
上面的第1種和第2種方式都是通過對圖層進行直接改動,假設專案圖片多的話就會變得卡,所以建議最好不要使用此種方式,此種方式最消耗效能。而第3種、第4種、第5種的優勢在於:此種做法不是對控制元件或者圖片做手腳,而是將伺服器返回的正方形,通過繪製做成了圓形的圖片,再把圓形的圖片設定到imageView上去,這樣就直接顯示圖片了。
相關文章
- SpringMVC非同步處理的 5 種方式SpringMVC非同步
- 圓形視訊和圓角視訊的一種實現方式
- 關於Android的幾種事件處理Android事件
- LoadRunner中多值關聯的3種處理方式
- XImageView-ShapeImageView處理ImageView形狀,原形圓角等View
- PHP處理密碼的幾種方式PHP密碼
- SQLite 併發的四種處理方式SQLite
- php 與 nginx 的兩種處理方式PHPNginx
- 對於linux go1.5版本的一種tcp監聽關閉處理方式LinuxGoTCP
- Python影像處理丨5種影像處理特效Python特效
- 小白:關於處理“can't find '__main__' module in ”這個問題的詳細處理方式!AI
- 關於丟失表空間資料檔案的處理方式
- HBase協處理器載入的三種方式
- JavaScript 動畫方式彈出圓角框JavaScript動畫
- 關於叢集節點timeline不一致的處理方式
- 關於Python中的日期處理Python
- 幾種常見的延遲執行處理方式
- error的處理方式Error
- 關於go的跨域處理 ginGo跨域
- 關於linux病毒`kinsing` `kdevtmpfsi`的處理Linuxdev
- 執行緒池異常處理的 5 中方式執行緒
- 關於GCD多工處理GC
- 關於php rsa加密處理PHP加密
- 關於SSRF和多種繞過方式
- 關於attention中對padding的處理:maskpadding
- 關於特殊符號&與& 的處理符號
- Java--- 關於null的處理若干方法JavaNull
- 關於一類資料處理
- 關於多執行緒的兩種實現方式執行緒
- CGContextRef處理圓形圖片GCContext
- visio圓角矩形怎麼改變圓角大小
- Flutter處理Webview與H5通訊的常見方式FlutterWebViewH5
- Java 中關於 null 物件的容錯處理JavaNull物件
- 關於移動端IOS active失效的處理iOS
- 關於 Eloquent ORM 對資料處理的思考ORM
- 關於OT分類的一些處理
- canvas-座標系、圓角矩形、紋理、剪裁Canvas
- linux中cp複製時處理軟連結的兩種方式Linux
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo