0.前言
分享出去的图片总是和当前界面有些区别,为了用户体验,会在分享前生成需要的图片。
刚开始做图片分享尝试将视图拷贝,然后将拷贝的视图加入到需要分享的页面,但是子视图用xib的话拷贝不出来,放弃。现在采用分享的时候将需要展示的视图加在分享页面,生成图片后再加回原来的页面(ps:如果分享的图片就是当前界面就不用这么麻烦)。
1.生成图片的方式
///根据一个View生成一个image
- (UIImage *)screenshotForView:(UIView *)view size:(CGSize)size {
UIImage *image = nil;
///设置生成图片的大小、是否有透明(如果视图没有透明视图,就设置YES,效率更高),放大比例(设置0,系统就会自动进行最佳的缩放)
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
2.分享长图(scrollView、tableView),以tableView为例
tableView会有复用回收机制,只要改变父视图的高度即可
-(UIImage *)createShareImage{
//改变父视图高度和tableView高度
self.view.height = self.tableView.contentSize.height;
self.tableView.height = self.tableView.contentSize.height;
//刷新布局
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
//分享界面加上视图(detail)
[self.detailView addSubview:self.tableView];
self.detailView.height = self.tableView.height;
UIImage *img = [self screenshotForView:self.detailView size:self.detailView.frame.size];
[self.view addSubview:self.tableView];
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
return img;
}
网友评论