1、思路分析
- 先绘画一个大圆
- 然后绘画一个小圆,设置其为裁剪区域
- 将裁剪的图片draw到小圆中,就能将其按照小圆的范围裁剪掉其他的范围
2、 代码实现
#import "DrawView.h"
#define kBorderWith 10
@implementation DrawView
- (void)drawRect:(CGRect)rect {
// 获取图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
/**
* 1、绘画大圆
*/
CGRect bigRect = CGRectMake(rect.origin.x + kBorderWith, rect.origin.y+ kBorderWith, rect.size.width - kBorderWith*2, rect.size.height - kBorderWith*2);
CGContextSetLineWidth(ctx, kBorderWith);
CGContextAddEllipseInRect(ctx, bigRect);
[[UIColor whiteColor] set];
CGContextStrokePath(ctx);
/**
* 2、绘画小圆,设置为裁剪区域
*/
CGRect smallRect = CGRectMake(rect.origin.x + kBorderWith, rect.origin.y + kBorderWith, rect.size.width - 2 * kBorderWith, rect.size.height -2 * kBorderWith);
CGContextAddEllipseInRect(ctx, smallRect);
CGContextClip(ctx);
// 裁剪图片
UIImage *image = [UIImage imageNamed:@"阿狸头像"];
// 设置图片的裁剪区域为小圆
[image drawInRect:smallRect];
// 将上下文的内容渲染到视图的layer图层上
CGContextStrokePath(ctx);
}
@end
#define kBorderWith 10
@implementation DrawView
- (void)drawRect:(CGRect)rect {
// 获取图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
/**
* 1、绘画大圆
*/
CGRect bigRect = CGRectMake(rect.origin.x + kBorderWith, rect.origin.y+ kBorderWith, rect.size.width - kBorderWith*2, rect.size.height - kBorderWith*2);
CGContextSetLineWidth(ctx, kBorderWith);
CGContextAddEllipseInRect(ctx, bigRect);
[[UIColor whiteColor] set];
CGContextStrokePath(ctx);
/**
* 2、绘画小圆,设置为裁剪区域
*/
CGRect smallRect = CGRectMake(rect.origin.x + kBorderWith, rect.origin.y + kBorderWith, rect.size.width - 2 * kBorderWith, rect.size.height -2 * kBorderWith);
CGContextAddEllipseInRect(ctx, smallRect);
CGContextClip(ctx);
// 裁剪图片
UIImage *image = [UIImage imageNamed:@"阿狸头像"];
// 设置图片的裁剪区域为小圆
[image drawInRect:smallRect];
// 将上下文的内容渲染到视图的layer图层上
CGContextStrokePath(ctx);
}
@end
- 使用的话,创建一个自定义DrawView对象,添加到控制器的view上显示
网友评论