主控制器的关键代码:
ViewController.m
#import "ViewController.h" #import "UIImage+ZR.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *iconV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIImage *newImage = [UIImage circleImage:@"me" borderWith:3 borderColor:[UIColor greenColor]]; self.iconV.image = newImage; } @end
创建UIImage分类文件:
UIImage+ZR.h
#import <UIKit/UIKit.h> @interface UIImage (ZR) +(instancetype)circleImage:(NSString *)name borderWith:(CGFloat)borderWith borderColor:(UIColor *)borderColor; @end
UIImage+ZR.m
#import "UIImage+ZR.h" @implementation UIImage (ZR) +(instancetype)circleImage:(NSString *)name borderWith:(CGFloat)borderWith borderColor:(UIColor *)borderColor{ UIImage *oldImage = [UIImage imageNamed:name]; //2.开启上下文 CGFloat imageW = oldImage.size.width + 2*borderWith; CGFloat imageH = oldImage.size.height + 2*borderWith; CGSize imageSize = CGSizeMake(imageH, imageW); UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0); //3.取得当前上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //4.画圆边框(大圆) [borderColor set]; CGFloat bigRadius = imageW * 0.5;//半径 CGFloat centerX = bigRadius;//圆心 CGFloat centerY = bigRadius; CGContextAddArc(ctx, centerX, centerY, bigRadius, 0, M_PI * 2, 0); CGContextFillPath(ctx);//画圆 //5.小圆 CGFloat smallRadius = bigRadius - borderWith; CGContextAddArc(ctx, centerX, centerY, smallRadius, 0, M_PI *2, 0); //裁剪(后面画的东西才会受影响) CGContextClip(ctx); //6.画图 [oldImage drawInRect:CGRectMake(borderWith, borderWith, oldImage.size.width, oldImage.size.height)]; //7.取图 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); //8.结束上下文 UIGraphicsEndImageContext(); return newImage; } @end