【深入浅出IOS开发】图形的裁剪

来源:互联网 发布:淘宝 剑三测试激活码 编辑:程序博客网 时间:2024/05/16 07:00

我们要做出以下的效果:


①这里我们要新建一个图层

②得到图层的设备上下文

③在图层中绘制一个大圆,然后渲染到图层

④然后绘制一个小圆,剪切,然后渲染到图层

⑤绘制图片图层中

⑥然后从当前图层中获得图片,显示到View中

- (void)drawRect:(CGRect)rect{    UIImage *imageBackground = [UIImage imageNamed:@"01"];        //1.创建图层,此图大一些作为外框    CGFloat margin = 5;    CGFloat imageNewWidth = imageBackground.size.width + margin;    CGFloat imageNewHeight = imageBackground.size.width+ margin;    UIGraphicsBeginImageContextWithOptions(CGSizeMake(imageNewWidth, imageNewHeight), NO, 0.0);    //2.创建设备上下文,此时得到的上下文是图层的上下文。原因是上面创建了图层    CGContextRef ctr = UIGraphicsGetCurrentContext();    //3.在图层中绘制一个大圆,作为外框    CGContextAddEllipseInRect(ctr, CGRectMake(0, 0, imageNewWidth, imageNewHeight));    [[UIColor redColor]set];    CGContextFillPath(ctr);        //3.绘制小圆作为剪切图片的用    [[UIColor blueColor]set];    CGContextAddEllipseInRect(ctr, CGRectMake(margin, margin, imageNewWidth - 2*margin, imageNewHeight - 2*margin));    //4.按照当前的模式裁剪,裁剪只对后面绘制的图层有效 对已经绘制的图层无效   CGContextClip(ctr);    CGContextStrokePath(ctr);    //5.绘制图片    [imageBackground drawAtPoint:CGPointMake(0, 0)];    //6.从当前图层中获得Image    UIImage *imageNew = UIGraphicsGetImageFromCurrentImageContext();    //7.结束图层    UIGraphicsEndImageContext();        //8.绘制上文得到的Image到View中    [imageNew drawAtPoint:CGPointMake(0, 0)];}


0 0