iOS 图片分享(长图)

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;
}

你可能感兴趣的:(iOS 图片分享(长图))