主控制器的关键代码:
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@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