源码下载地址:http://download.youkuaiyun.com/detail/liu537192/8514735
效果图:
核心代码:
//
// JLView.m
// 04-裁剪
//
// Created by XinYou on 15-3-19.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "JLView.h"
@implementation JLView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect
{
// 1,获得上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2,将ctx拷贝一份到上下文栈中
CGContextSaveGState(ctx);
// 3,画圆
CGContextAddArc(ctx, 250, 200, 25, 0, M_PI * 2, 0);
// CGContextAddRect(ctx, CGRectMake(0, 0, 320, 150));//①
// 4,设置绘图状态
// 设置裁剪范围。因为当前view中只有一个圆,所以此时设置裁剪范围的作用是:超出圆的范围的部分都剪掉。
CGContextClip(ctx);
CGContextFillPath(ctx);
// 5,显示图片
UIImage *image1 = [UIImage imageNamed:@"me"];
[image1 drawAtPoint:CGPointMake(225, 175)];
// 这里绘制一个矩形是没有用的(看不见),因为这个矩形根本不在裁剪范围内,所以不会显示。
// 如果打开①,下面这个矩形就会显示。理解这是为什么!!!
CGContextAddRect(ctx, CGRectMake(100, 100, 50, 50));
CGContextFillPath(ctx);
// 6,还原ctx(还原之后裁剪范围失效)
CGContextRestoreGState(ctx);
// 7,再显示一张图片,因为已经还原了ctx,所以这张图片不会被裁剪
UIImage *image2 = [UIImage imageNamed:@"me"];
[image2 drawAtPoint:CGPointMake(25, 175)];
}
@end