美文网首页
UITableView截取列表长图并使用原生分享

UITableView截取列表长图并使用原生分享

作者: 此笙吥涣 | 来源:发表于2023-06-06 09:13 被阅读0次

    最近项目有个需求,简历功能是个列表,需要截图并通过原生分享出去,简单的记录一下解决方案。话不多说,直接上代码,如有问题欢迎指正。

    注意:此方法需要在第一次渲染页面时调用一次,截图操作时再调用一次,防止cell服用截图缺失

    - (UIImage*)captureImageLonge:(UITableView*)shotTableView{
        
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
            
            UIGraphicsBeginImageContextWithOptions(self.makeTableView.contentSize, NO, [UIScreen mainScreen].scale);
        }else{
           
            UIGraphicsBeginImageContext(self.makeTableView.contentSize);
        }
        //先保存原来frame 和 偏移量
        CGPoint savedContentOffset =self.makeTableView.contentOffset;
        CGRect savedFrame =self.makeTableView.frame;
        CGSize contentSize =self.makeTableView.contentSize;
        CGRect oldBounds =self.makeTableView.layer.bounds;
        if(@available(iOS 13.0, *)){
            //iOS 13 系统截屏需要改变tableview 的bounds
            [self.makeTableView.layer setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, contentSize.width, contentSize.height+20)];
        }
        //偏移量归零
        self.makeTableView.contentOffset = CGPointZero;
        self.makeTableView.frame = CGRectMake(0, 0, self.makeTableView.contentSize.width, self.makeTableView.contentSize.height+20);
        //截图
        [self.makeTableView.layer renderInContext:UIGraphicsGetCurrentContext()];
        
        if(@available(iOS 13.0,*)){
           
            [self.makeTableView.layer setBounds:oldBounds];
        }
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        //还原frame 和 偏移量
    //    self.tableView.contentOffset = savedContentOffset;
        self.makeTableView.frame= savedFrame;
        self.makeTableView.contentOffset= savedContentOffset;
    
        return image;
    }
    

    使用原生分享

    - (void) shareRemuse {
        
        [self captureImageLonge:self.makeTableView];
        
        NSMutableArray *images = [NSMutableArray array];
        [images addObject:[self captureImageLonge:self.makeTableView]];
        UIActivityViewController *activityController=[[UIActivityViewController alloc]initWithActivityItems:images applicationActivities:nil];
        [self.navigationController presentViewController:activityController animated:YES completion:nil];
        
    }
    

    相关文章

      网友评论

          本文标题:UITableView截取列表长图并使用原生分享

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