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

2019-04-04  本文已影响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...

上一篇下一篇

猜你喜欢

热点阅读