美文网首页
iOS 图片截取

iOS 图片截取

作者: smirkk | 来源:发表于2016-01-22 20:26 被阅读575次
  • 业务逻辑:为需要切图的view添加pan手势,定义一个需要截取范围视图的成员属性,定义一个成员变量用来记录手指的开始点,在pan方法中,根据手势的状态,获取矩形框的开始起点和结束点,然后根据起点和终点,获取截取范围,然后开启位图上下文,设置裁剪区域,把内容渲染到上下文,获取新的图片,结束上下文,最后删除截取范围视图,并值为nil,移除手势
@interface ViewController ()
// 开始起点属性
@property (nonatomic, assign) CGPoint startP;
// 截取范围视图
@property (nonatomic, weak) UIView *clipView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (UIView *)clipView
{
    if (!_clipView) {
        UIView *clipView = [[UIView alloc] init];
        clipView.backgroundColor = [UIColor blackColor];
        clipView.alpha = 0.5;
        _clipView = clipView;
        [self.view addSubview:_clipView];
    }
    
    return _clipView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self addGesture];
}
- (void)addGesture
{
    // 添加pan手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [self.view addGestureRecognizer:pan];
}
#pragma mark - pan手势
- (void)pan:(UIPanGestureRecognizer *)pan
{
    CGPoint endP = CGPointZero;
    // 获取矩形框的开始起点
    if (pan.state == UIGestureRecognizerStateBegan) {
        // 获取一开始触摸点
        self.startP = [pan locationInView:self.view];
    }else if (pan.state == UIGestureRecognizerStateChanged)
    {
        // 获得结束那一时刻的点
        endP = [pan locationInView:self.view];
        // 根据起点和终点,获取截取范围
        CGFloat w = endP.x - self.startP.x;
        CGFloat h = endP.y - self.startP.y;
        
        CGRect clipRect = CGRectMake(self.startP.x, self.startP.y, w, h);
        
        self.clipView.frame = clipRect;
        
    }else if (pan.state == UIGestureRecognizerStateEnded)
    {
        // 开启上下文
        UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 0);
        
        // 设置裁剪区域
        UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.clipView.frame];
        [path addClip];
        
        // 把内容渲染到上下文
        [self.imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
        
        // 获取新的图片
        self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
        
        // 结束上下文
        UIGraphicsEndImageContext();
        
        // 删除clipView视图
        [self.clipView removeFromSuperview];
        self.clipView = nil;
        
        [self.view removeGestureRecognizer:pan];
    }
}

相关文章

  • iOS 截取tableView, scrollerView图片

    iOS 截取tableView, scrollerView图片

  • 裁剪图片的特定区域

    使用 封装 参考: iOS 截取图片 部分 并生成新图片

  • ios截取图片

    最近有朋友遇到要截取图片中间部分展示在imageView上的问题,想着社交应用还是很可能遇到这种情况的就写下来。 ...

  • iOS 图片截取

    业务逻辑:为需要切图的view添加pan手势,定义一个需要截取范围视图的成员属性,定义一个成员变量用来记录手指的开...

  • iOS 图片截取

    入参说明:image:原始图片,rect:需要截取的位置(范围 image.bound) 出参说明:大小为 rec...

  • iOS之图片截取

    在项目中有的时候需要用截取图片的功能,有的时候还需要将特定的视图进行截取,所以就写了这个demo。1.从相册中进行...

  • iOS 截取视图图片

    1、创建一个基于位图的图形上下文并指定大小为CGSizeMake(200, 400) 2、renderInCont...

  • Unity无UI截屏

    实现的功能: 截取当屏幕显示的画面 去除画面上的UI元素 Android、iOS端通用,截取完成的图片在相册中显示...

  • iOS编程中滑动截图

    截取view,返回图片 截取ScrollView,返回图片

  • iOS 截取屏幕 生成图片

    很多App都有分享功能,有时候我们需求把当前界面生成一张图片展示出去。 //1.开启图片上下文 UIGraphic...

网友评论

      本文标题:iOS 图片截取

      本文链接:https://www.haomeiwen.com/subject/abcrkttx.html