在市场上主流App中,大多数App都具有存储图片到自己App的相册中.苹果提供的方法只能存储图片到系统相册,下面讲一下怎么实现:

实现思路:

   1.对系统相册进行操作的前提必须导入#import <Photos/Photos.h>

2.在用户点击保存之后,首先判断用户是否允许App访问相册.若不是不可以,提醒用户需要打开权限.

3.进入用户相册之后,首先判断有没有改App储存图片的相册,有的话直接把图片存储进去,没有的话创建一个新的相册.

4.在图片存储到相册的时候用到占位图片.

具体实现:

// 1.获取用户授权状态,状态有四种

// 1) PHAuthorizationStatusNotDetermined  不确定

// 2)  PHAuthorizationStatusRestricted, 家长控制,拒绝

// 3)  PHAuthorizationStatusDenied, 拒绝

// 4) PHAuthorizationStatusAuthorized 授权

PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

 // 2.判断用户的授权状态

if (status == PHAuthorizationStatusNotDetermined) {

// 如果状态是不确定的话,block中的内容会等到授权完成再调用

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

// 授权完成就会调用

if (status == PHAuthorizationStatusAuthorized) {

      //调用存储图片的方法

[self savePhoto];

}

}];

//如果允许访问

} else if (status == PHAuthorizationStatusAuthorized) {

   //调用存储图片的方法

[self savePhoto];

//如果权限是拒绝

} else {

// 使用第三方框架,弹出一个页面提示用户去打开授权

// [SVProgressHUD showInfoWithStatus:@"进入设置界面->找到当前应用->打开允许访问相册开关"];

}

#pragma mark - 该方法获取在图库中是否已经创建该App的相册

  //该方法的作用,获取系统中所有的相册,进行遍历,若是已有相册,返回该相册,若是没有返回nil,参数为需要创建  的相册名称

- (PHAssetCollection *)fetchAssetColletion:(NSString *)albumTitle

{

// 获取所有的相册

PHFetchResult *result = [PHAssetCollection           fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

//遍历相册数组,是否已创建该相册

for (PHAssetCollection *assetCollection in result) {

if ([assetCollection.localizedTitle isEqualToString:albumTitle]) {

return assetCollection;

}

}

return nil;

}

#pragma mark - 保存图片的方法

- (void)savePhoto

{

//修改系统相册用PHPhotoLibrary单粒,调用performChanges,否则苹果会报错,并提醒你使用

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

// 调用判断是否已有该名称相册

PHAssetCollection *assetCollection = [self fetchAssetColletion:

@"百思"];

//创建一个操作图库的对象

PHAssetCollectionChangeRequest *assetCollectionChangeRequest;

if (assetCollection) {

// 已有相册

assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];

} else {

// 1.创建自定义相册

assetCollectionChangeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"百思"];

}

// 2.保存你需要保存的图片到系统相册(这里保存的是_imageView上的图片)

PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:_imageView.image];

// 3.把创建好图片添加到自己相册

   //这里使用了占位图片,为什么使用占位图片呢

  //这个block是异步执行的,使用占位图片先为图片分配一个内存,等到有图片的时候,再对内存进行赋值

PHObjectPlaceholder *placeholder = [assetChangeRequest placeholderForCreatedAsset];

[assetCollectionChangeRequest addAssets:@[placeholder]];

} completionHandler:^(BOOL success, NSError * _Nullable error) {

//弹出一个界面提醒用户是否保存成功

if (error) {

//[SVProgressHUD showErrorWithStatus:@"保存失败"];

} else {

// [SVProgressHUD showSuccessWithStatus:@"保存成功"];

}

}];

}

iOS中怎么存储照片到自定义相册的更多相关文章

  1. iOS中 图文混排/自定义图文混排 作者:韩俊强

    指示根视图:(准备几张图片,把label加载在window上) CustomLable *label = [[CustomLable alloc]initWithFrame:CGRectMake(0, ...

  2. iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码

    iOS精选源码 企业级开源项目,模仿艺龙旅行App 标签选择器--LeeTagView CSSegmentedControl常用的分段选择器,简单易用! 仿微信左滑删除 IOS左滑返回 输入框 iOS ...

  3. ios中从相册:相机中获取图片信息

    ios中从相册/相机中获取图片信息 从相册中获取图片的信息 UIImagePickerController *imgPickView = [[UIImagePickerController alloc ...

  4. ios中摄像头/相册获取图片压缩图片上传服务器方法总结

    本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下.     这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...

  5. iOS中创建自定义的圆角按钮

    iOS中很多时候都需要用到指定风格的圆角按钮,尽管UIButton提供了一个方式创建圆角按钮: + (id)buttonWithType:(UIButtonType)buttonType;//指定bu ...

  6. IOS中调用系统的电话、短信、邮件、浏览功能

    iOS开发系列--通讯录.蓝牙.内购.GameCenter.iCloud.Passbook系统服务开发汇总 2015-01-13 09:16 by KenshinCui, 26990 阅读, 35 评 ...

  7. iOS 中有用的开源库

    youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配 ...

  8. iOS中XMPP简单聊天实现 好友和聊天

    版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...

  9. iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

    iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...

随机推荐

  1. HTML5 WebSocket

    在WebSocket API中,浏览器和服务器只需要做一个握手动作,然后,浏览器和服务器之间就形成一条快速通道,两者之间就可以直接进行数据传送,这一个功能可以应用到"字幕",自己做 ...

  2. 配置python环境变量(转)

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...

  3. Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...

  4. [IOS]swift 使用AVOS的API

    避免写后台代码,但保证app能够有后台,使用了AVOS这个产品来帮助自己的app联网,AVOS是很强大的云服务,基本原理和Parse差不多,只是parse在国外可能对国内用户联网速度上有点限制. 下面 ...

  5. Python使用总结二

    近来因为工作需要,用Python比较多,写得多了,收获也多.借此记录总结一下,方便以后反思. 一.IDE的选择 1.notepad++加上cmd窗口 前些时候写python脚本都用notepad++编 ...

  6. 奇怪的UnexpectedRollbackException异常

    今天在使用一个原来常用的功能的时候,突然发现在某些场景下会报异常,内容如下: 通过断点调试发现一路都很顺畅,就是在从controller层返回前段的时候会报该异常,没办法,只能通过排除法定位问题,后来 ...

  7. input框focus时的美化效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 用C语言编写生成小学四则运算程序

    使用软件——VS 2015 使用环境——C语言 早在上周我就开始使用C#语言做,由于最后一点问题而放弃,之后用C语言开始做,很顺利,但是也碰到了一些问题,但是通过了百度文库上的一些程序的借鉴和吴阿平同 ...

  9. java 引入自定义字体font后出现的硬盘吃光的问题

    有个需求要用美术字体在图片上写字 用自定义的文字有两个方法: 1. Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream ...

  10. Github上传代码菜鸟超详细教程

      最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选 ...