最近项目有个需求,简历功能是个列表,需要截图并通过原生分享出去,简单的记录一下解决方案。话不多说,直接上代码,如有问题欢迎指正。
注意:此方法需要在第一次渲染页面时调用一次,截图操作时再调用一次,防止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];
}