1. 程式人生 > >iOS 實現圖片圓角的幾種方式

iOS 實現圖片圓角的幾種方式

第一種方法:通過設定layer的屬性

最簡單的一種,但是很影響效能,一般在正常的開發中使用很少.

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];    //只需要設定layer層的兩個屬性    //設定圓角     imageView.layer.cornerRadius = imageView.frame.size.width / 2;    //將多餘的部分切掉     imageView.layer.masksToBounds = YES;     [self.view addSubview:imageView];

第二種方法:使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個圓角

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];     imageView.image = [UIImage imageNamed:@"1"];     //開始對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];

第三種方法:使用CAShapeLayer和UIBezierPath設定圓角

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];     imageView.image = [UIImage imageNamed:@"1"];     UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];     //設定大小     maskLayer.frame = imageView.bounds;     //設定圖形樣子     maskLayer.path = maskPath.CGPath;     imageView.layer.mask = maskLayer;     [self.view addSubview:imageView];

以上三種方法來自簡書連結 http://www.jianshu.com/p/e97348f42276 這個連結的文章裡說第三種方法最好 對記憶體消耗最少,可是在另一篇比較權威的文章http://www.jianshu.com/p/57e2ec17585b《iOS-離屏渲染詳解》裡說第三種方法會使用到mask屬性,會離屏渲染,不僅這樣,還曾加了一個 CAShapLayer物件.著實不可以取。並指出第二種方法比較可取。另外還提出了第四種方法。 第四種方法:使用帶圓形的透明圖片.(需要UI做一個切圖)

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];     imageView.image = [UIImage imageNamed:@"美國1.jpeg"];     UIImageView *imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];     imageView1.image = [UIImage imageNamed:@"圓形白邊中空圖"];     [self.view addSubview:imageView];     [self.view addSubview:imageView1];

最好最好的方法應該是第四種了,雖然比較笨, 但是不會引發離屏渲染,對記憶體消耗會比較小。