IOS实现长图截取

总结一下最近遇到的功能开发。

因为IOS自带的截图并不能截取长图,所以为了更好的用户体验,我们需要开发对应的功能。

- (UIImage *)screenShotWithSize:(CGSize )size {
    UIImage* image = nil;
    /*
     *UIGraphicsBeginImageContextWithOptions有三个参数
     *size    bitmap上下文的大小,就是生成图片的size
     *opaque  是否不透明,当指定为YES的时候图片的质量会比较好
     *scale   缩放比例,指定为0.0表示使用手机主屏幕的缩放比例
     */
    UIGraphicsBeginImageContextWithOptions(size, YES, [UIScreen mainScreen].scale);
    //保存tableView当前的偏移量
    CGPoint savedContentOffset = self.tableView.contentOffset;
    CGRect saveFrame = self.tableView.frame;
    CGRect saveViewFrame = self.view.frame;
    
    //将tableView的偏移量设置为(0,0)
    self.tableView.contentOffset = CGPointZero;
    self.tableView.frame = CGRectMake(0, saveFrame.origin.y, self.tableView.contentSize.width, self.tableView.contentSize.height);
    self.view.frame = CGRectMake(0, 0, size.width,size.height);
    //在当前上下文中渲染出tableView
    [self.view.layer renderInContext: UIGraphicsGetCurrentContext()];
    //截取当前上下文生成Image
    image = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    //恢复tableView的偏移量
    self.tableView.frame = saveFrame;
    [self.tableView setContentOffset:savedContentOffset animated:NO];
    self.view.frame = saveViewFrame;
    
    
    if (image != nil) {
        return image;
    }else {
        return nil;
    }
}

以view作为容器,在截图前后通过变换view和tableView的高度,实现长截图功能。同理,也可以根据该方法,实现collectionView和scrollView的全截图。至于后续是保存本地还是分享到三方平台,这个就需要各位看官自己去实现了。

PS:这个方法有些时候会造成截图不完整,经过调查发现,是因为没有关闭self-sizing,这个时候就需要下方的代码了。

//关闭self-sizing
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值