scrollView转化image 并保存到本地相册

项目开发中的一个需求 ,需要将不在屏幕中的内容也要截图保存到本地相册 ,于是我的思路是:将下面的大的scrollView转化为image,再将image保存相册即可。以下是我的代码:

pragma mark 把scrollView转换成image

- (UIImage *)captureScrollView:(UIScrollView *)scrollView{
    UIImage* image = nil;
//  第一个参数表示区域大小。第二个参数表示是否是非透明的,一般传no。第三个参数就是屏幕密度了,关键就是第三个参数
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, NO, [UIScreen mainScreen].scale);
    {
        CGPoint savedContentOffset = scrollView.contentOffset;
        CGRect savedFrame = scrollView.frame;
        scrollView.contentOffset = CGPointZero;
        scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
        [scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
        image = UIGraphicsGetImageFromCurrentImageContext();
        scrollView.contentOffset = savedContentOffset;
        scrollView.frame = savedFrame;
    }
    UIGraphicsEndImageContext();
    if (image != nil) {
        return image;
    }
    return nil;
}

pragma mark 点击保存图片按钮的实现方法

- (void)saveImageButtonAction:(id)sender{
    NSLog(@"点击了保存图片");
    UIImage *image = [self captureScrollView:self.bigView];
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}

pragma mark 成功保存图片到相册中, 必须调用此方法, 否则会报参数越界错误

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    
    NSLog(@"error == %@",error);
    if (!error) {
        [SVProgressHUD showSuccessWithStatus:@"保存成功"];
    } else {
        [SVProgressHUD showErrorWithStatus:@"保存失败"];
    }
}

最后说一下我在这里遇到的一个坑:大家在设置scrollView的ContentSize时 如果设置宽为0的话,会一直生成image失败,导致保存不成功。宽度改成屏幕的宽度即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 12,950评论 3 38
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • 前天在和朋友见面的路上开始看这本书,看了三分之一就觉得乐的不行,在此之前我一直都觉得搞经济的人都是特别严谨特别严肃...
    亦如是阅读 3,138评论 0 0
  • 小米最近在台湾发生了两件事:瞒报销量和收集客户隐私。不知如何言语。 瞒报销量好像也出入不大,说说小米为什么收集客户...
    asker阅读 5,135评论 0 1
  • 早上,振生发烧了,昨夜回家正赶上变天,寒邪入侵体内,受凉发烧。妻子小雪建议在家针灸处理,振生一脸不屑,"针灸能治病...
    一颗绿心阅读 1,826评论 0 0