美文网首页
iOS 截长图功能、截取时拼图

iOS 截长图功能、截取时拼图

作者: 宏炜 | 来源:发表于2019-04-04 14:42 被阅读0次

    截取长图, 屏幕肯定是能够滑动的, 所以基类是UIScrollView, 一般是webview或tableview等控件, 我在项目中使用的是tableview, 截取时在头部拼接一个view,用来描述图片的说明!

    具体实现代码:

    #pragma mark ======= 截屏 ======
    // 返回截取后的图片
    -(UIImage *)screenshotsImage{
       //拼接头视图
       self.tableView.tableHeaderView = [self headView];
       
       if (self.tableView.contentSize.height < kHeight) {
           //如果tableview数据的高度小于屏幕高度, 就截整屏显示, 否则数据源只有1、2条时, 截取的内容就会很少,不美观
           self.tableView.contentSize = CGSizeMake(kWidth, kHeight);
       }
       
       // 开启图形上下文
       UIGraphicsBeginImageContextWithOptions(self.tableView.contentSize, YES, [UIScreen mainScreen].scale);
       
       CGPoint savedContentOffset = self.tableView.contentOffset;
       
       CGRect savedFrame = self.tableView.frame;
       
       self.tableView.contentOffset = CGPointZero;
       
       self.tableView.frame = CGRectMake(0, Height_NavBar, self.tableView.contentSize.width, self.tableView.contentSize.height);
       
       [self.tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
       
     //因为 renderInContext 渲染时会导致内存急剧上升,可能会造成crash, 所以要清除 layer 绘制过后产生的缓存
       self.tableView.layer.contents = nil; //释放缓存
      
       UIImage *image = [[UIImage alloc]init];
    
       image = UIGraphicsGetImageFromCurrentImageContext(); //从图形上下文获取图片
       
       UIGraphicsEndImageContext();
    
       self.tableView.tableHeaderView = nil;
       
       self.tableView.contentOffset= savedContentOffset;
       
       self.tableView.frame= savedFrame;
       
       return image;
       
    }
    
    
    //截屏时添加头视图, 显示日期
    -(UIView *)headView{
       UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 10, 240, 45)];
       headView.backgroundColor = keyColor;
       
       UILabel *textLab = [[UILabel alloc] init];
       textLab.text = self.title;
       textLab.textColor = [UIColor whiteColor];
       textLab.font = [UIFont systemFontOfSize:18];
       [headView addSubview:textLab];
       
       [textLab mas_makeConstraints:^(MASConstraintMaker *make) {
           make.center.mas_equalTo(headView);
       }];
       
       return headView;
    }
    
    

    注意: 如果截取的图片背景是黑色, 将tableview的背景色改为白色即可!

    截取后的效果图展示

    Ending...

    相关文章

      网友评论

          本文标题:iOS 截长图功能、截取时拼图

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