图片任意截屏的实现

功能:任意一张图片,通过触摸屏幕,可以剪切任意大小的子图片。
思路:1.用手势+重绘图片实现;
2.手势控制截图的区域,重绘设置裁剪区域和生成图片。
主要代码如下(这是手势出发的方法实现):

- (void)panGestureAction:(UIPanGestureRecognizer *)pan
{
    CGPoint currentPoint = [pan locationInView:self.view];
    if (pan.state == UIGestureRecognizerStateBegan)
    {
        self.startPoint = currentPoint;
    }else if (pan.state == UIGestureRecognizerStateChanged)
    {
        CGPoint point = [pan locationInView:self.view];
        CGFloat width = fabs(self.startPoint.x - point.x);
        CGFloat height = fabs(self.startPoint.y - point.y);
        self.coverView.frame = CGRectMake(self.startPoint.x, self.startPoint.y, width, height);
    }else if (pan.state == UIGestureRecognizerStateEnded){
        //1.生成一个与原来图片一样大的图片
        UIGraphicsBeginImageContextWithOptions(self.baseImageView.bounds.size, NO, 1);
        //2.设置剪裁区
        UIBezierPath *clipath = [UIBezierPath bezierPathWithRect:self.coverView.frame];
        [clipath addClip];
        //3.渲染当前图片
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        [self.baseImageView.layer renderInContext:ctx];
        //4.获取新图片
        UIImage *currentImage = UIGraphicsGetImageFromCurrentImageContext();
        //5.关闭上下文
        UIGraphicsEndImageContext();
        //6.重新设置图片
        self.baseImageView.image = currentImage;
        //7.移除浮层
        [self.coverView removeFromSuperview];
       self.coverView = nil;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,037评论 3 119
  • 问:如何安慰一个考试失利的女生?我们不在同一城市,只能通电话,如何安慰她,使得我要表达出一次失利不代表全部,能让她...
    心理咨询培训师赵倩April阅读 4,172评论 0 2
  • 先科普:舒适区是一个心理学概念,指的是一个人所处的一种环境和习惯行为,人在这种状态下会感到绝对的舒适与安全。 01...
    苟且趁年华阅读 4,957评论 0 9
  • 马化腾,男,1971年10月29日生于广东省汕头市潮南区。腾讯公司主要创办人之一。现任腾讯公司控股董事会主席兼首席...
    随心_TING阅读 1,235评论 0 0
  • 今天是九月十八!我已经七天没写日记了!这几天没什么事发生,这大概就是工地生活的无趣所在吧。日复一日,不过宋先生这几...
    萍111阅读 1,911评论 0 0