图片圆角设置
2015-12-10 本文已影响671人
Wang66
方案一:切layer#
直接设置该UIImageView的layer的cornerRadius属性(半径)为UIImageView宽度的一半。
- (void)viewDidLoad
{
[super viewDidLoad];
_imgView.image = [UIImage imageNamed:@"1.jpg"];
_imgView.layer.cornerRadius = _imgView.frame.size.width*0.5;
_imgView.layer.masksToBounds = YES; // 超出部分裁剪掉
}
这种方式非常简单,但是性能不太好,当有很多图片被切为圆角后,在上下滚动的时候有些卡顿。
方案二:用Core Graphics在圆形上绘制一张图片,并把超出部分才剪掉
// 开启图形上下文
UIGraphicsBeginImageContext(self.size);
// 获得上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// 矩形框
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
// 画一个圆
CGContextAddEllipseInRect(context, rect);
// 按上面图形裁剪多余部分
CGContextClip(context);
// 将image绘制到刚才的圆形上
UIImage *image = [UIImage imageNamed:@"1.jpg"];
[image drawInRect:rect];
// 获得上下文的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
用上面的几行代码就可以实现图片切圆角了,但是,为了扩展性着想,我们应当将这些代码进行封装。封装的这个方法我们希望:只需传入图片名(imgName)就返回已经切好圆角的图片(UIImage)。
可以新建一个UIImage的分类,在里面封装该实现。
UIImage
UIImage+CycleImage.h
#import <UIKit/UIKit.h>
@interface UIImage (CycleImage)
- (UIImage *)cycleImage;
+ (UIImage *)cycleImageNamed:(NSString *)imgName;
@end
UIImage+CycleImage.m
#import "UIImage+CycleImage.h"
@implementation UIImage (CycleImage)
- (UIImage *)cycleImage
{
// 开启图形上下文
UIGraphicsBeginImageContext(self.size);
// 获得上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// 矩形框
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
// 画一个圆
CGContextAddEllipseInRect(context, rect);
// 裁剪成上面画的图形形状
CGContextClip(context);
// 将image绘制到刚才的圆形上
// UIImage *image = [UIImage imageNamed:@"1.jpg"];
// [image drawInRect:rect];
[self drawInRect:rect];
// 获得上下文的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
+ (UIImage *)cycleImageNamed:(NSString *)imgName
{
return [[UIImage imageNamed:imgName] cycleImage];
}
调用:
// 图片圆角
#import "MyViewController.h"
#import "UIImage+CycleImage.h"
@interface MyViewController ()
@end
@implementation MyViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_imgView.image = [UIImage cycleImageNamed:@"1.jpg"]; // 类方法
// _imgView.image = [[UIImage imageNamed:@"1.jpg"] cycleImage]; // 对象方法
}
@end