图片截屏

    图片截屏实现思路.
    手指在屏幕上移动的时
    添加一个半透明的UIView,
    然后开启一个上下文把UIView的frame设置成裁剪区域.把图片显示的图片绘制到上下文当中,生成一张新的图片
    再把生成的图片再赋值给原来的UImageView.
    
    具体实现步骤:
    1.给图片添加一个手势,监听手指在图片上的拖动,添加手势时要注意,UIImageView默认是不接事件的.
      要把它设置成能够接收事件
    2.监听手指的移动.手指移动的时候添加一个UIView,
      x,y就是起始点,也就是当前手指开始的点.
      width即是x轴的偏移量,
      高度即是Y轴的偏移量.
      UIView的尺寸位置为CGrect(x,y,witdth,height);
      
      计算代码为:
      CGFloat offSetX = curP.x - self.beginP.x;
      CGFloat offsetY = curP.y - self.beginP.y;
      CGRect rect = CGRectMake(self.beginP.x, self.beginP.y, offSetX, offsetY);
      
      UIView之需要添加一次,所以给UIView设置成懒加载的形式,
      保证之有一个.每次移动的时候,只是修改UIView的frame.
      
    3.开启一个图片上下文,图片上下文的大小为原始图片的尺寸大小.使得整个屏幕都能够截屏.
      利用UIBezierPath设置一个矩形的裁剪区域.
      然后把这个路径设置为裁剪区域.
      把路径设为裁剪区域的方法为:
      [path addClip];
      
    4.把图片绘制到图片上下文当中
      由于是一个UIImageView上面的图片,所以也得需要渲染到上下文当中.
      要先获取当前的上下文,
      把UIImageView的layer渲染到当前的上下文当中.
      CGContextRef ctx = UIGraphicsGetCurrentContext();
      [self.imageV.layer renderInContext:ctx];
      
    5.取出新的图片,重新赋值图片.
      UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
      self.imageV.image = newImage;
      
    6.关闭上下文,移除上面半透明的UIView
      UIGraphicsEndImageContext();
      [self.coverView removeFromSuperview];

原文地址:https://www.cnblogs.com/xufengyuan/p/7020824.html