最近項目有個需求产艾,簡歷功能是個列表,需要截圖并通過原生分享出去,簡單的記錄一下解決方案闷堡。話不多說隘膘,直接上代碼,如有問題歡迎指正杠览。
注意:此方法需要在第一次渲染頁面時調(diào)用一次弯菊,截圖操作時再調(diào)用一次,防止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 系統(tǒng)截屏需要改變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];
}