關於圓角的5種處理方式

weixin_34236869發表於2016-08-10

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

1658521-33fa44093042bf91.png
1658521-91f78e75d40cba43.png

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


1658521-8ac013d5b424ef8a.png

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送上門

1658521-bf05f04eae48036f.png
Snip20160810_2.png

總結
上面的第1種和第2種方式都是通過對圖層進行直接改動,假設專案圖片多的話就會變得卡,所以建議最好不要使用此種方式,此種方式最消耗效能。而第3種、第4種、第5種的優勢在於:此種做法不是對控制元件或者圖片做手腳,而是將伺服器返回的正方形,通過繪製做成了圓形的圖片,再把圓形的圖片設定到imageView上去,這樣就直接顯示圖片了。

相關文章