图片擦除 (Quartz2D)

图片擦除.png

1、思路分析

  • 拖动的时候,擦除图片的某一部分
  • 手指拖拽的时候,清除指定位置,确定矩形区域,把控件上的内容渲染到上下文,显示清除后的图片
  • 1、开启上下文清除指定区域,将指定rect进行清除操作
  • 2、然后重新渲染顶部UIImageView,从上下文中获取清除后的上下文作为顶部UIImageView的图片显示.

2、实现代码:

#import "ViewController.h"

#define kMargin 5

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor orangeColor];
    
    UIImageView *topView = [[UIImageView alloc] init];
    topView.image = [UIImage imageNamed:@"top"];
    topView.frame = CGRectMake(50, 100, 200, 200);
    [self.view addSubview:topView];
    
    topView.userInteractionEnabled = YES; // 允许用户交互
    
    UIPanGestureRecognizer *panG = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panG:)];
    // 添加拖拽手势
    [topView addGestureRecognizer:panG];
}

/** 拖动的时候,擦除图片的某一部分
 *  手指拖拽的时候,清除指定位置,确定矩形区域,把控件上的内容渲染到上下文,显示清除后的图片
 *  1、开启上下文清除指定区域,将指定rect进行清除操作
 *  2、然后重新渲染顶部UIImageView,从上下文中获取清除后的上下文作为顶部UIImageView的图片显示.
 */
- (void)panG:(UIGestureRecognizer *)panG{
    
    // 1、开启位图上下文
    UIGraphicsBeginImageContextWithOptions(panG.view.frame.size, NO, 0);
    
    CGPoint curP = [panG locationInView:panG.view];
    
    // 2、清除范围
    CGRect rect = CGRectMake(curP.x - kMargin, curP.y - kMargin, 2*kMargin, 2*kMargin);

    // 3、 把控件上的内容渲染到上下文
    [panG.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    // 调用上下文清除方法,将指定rect进行清除操作
    CGContextClearRect(UIGraphicsGetCurrentContext(), rect);
    
    // 从上下文获取清除后的图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭位图上下文
    UIGraphicsEndImageContext();
    
    UIImageView *imageView = (UIImageView *)panG.view;
    
    imageView.image = image;
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章中迄今为止的绘制实施例中大多会产生一个UIImage对象,主要是通过调用UIGraphicsBeginImag...
    shenzhenboy阅读 1,384评论 0 4
  • Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低...
    ShanJiJi阅读 1,611评论 0 20
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,815评论 1 92
  • 在《奇葩说》的一期中,马东说误解就是这个真实的世界。 今天和同事大吵一架,对,我脾气有点儿爆,还是不走脑子的那种直...
    静静diary阅读 167评论 0 2