原文地址:https://www.cnblogs.com/muzichenyu/p/6006856.html

在市场上主流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. Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册

    一.获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片: 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地 ...

  2. 在iOS中为ViewController构建自定义过渡

    总览 (Overview) Every new iOS comes with design changes. This time we saw the new View Presentation St ...

  3. iOS中视图控制器指定自定义UIView

    他的好处就是在程序执行viewDIdLoad之前可以把我们需要用的数据加载完成.这也是减轻控制器的负担之一的办法.但是我个人觉得好是每有数据的延迟加载的功能牛.延迟加载只在数据需要的时候才被加载到视图 ...

  4. iOS中设置百度地图自定义标注图片,自定义泡泡

    #pragma mark - BMKMapViewDelegate // 根据anntation生成对应的View - (BMKAnnotationView *)mapView:(BMKMapView ...

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

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

  6. iOS拍照后存储照片到相册中

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDic ...

  7. iOS中,系统相册的那些事

    写在前面 在手机APP日益增加的前提下,如何更好的提升用户的交互体验似乎成为衡量一个APP重要指标.上述的感悟源于实际工作的需求,就是在APP中添加一个更换用户头像的功能. 也许别人会认为这样一个小功 ...

  8. c语言保存图片image,iOS 保存图片到【自定义相册】

    3.1.Photos 框架基本认识,我们可以在 Help->Developer Documentation-> 选择OC或者Swift 搜索 Photos Photos 框架检索 Phot ...

  9. ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体

    ios 自定义字体 by Yuichi Fujiki 藤木雄一 In this article, you'll learn how to create a unified custom look th ...

最新文章

  1. python virtualenv用法
  2. 只能在栈上或者堆上创建对象
  3. java web项目在tomcat中以调试模式运行
  4. 算法导论-概率发生器
  5. mysql数据横表变成竖表_MySQL中横表和竖表相互转换
  6. java中的多线程的示例
  7. 微信小程序中处理 获取用户地址的回调
  8. 哪种消息队列更好_如何编写更好的错误消息
  9. Jmeter BeanShell使用json.jar包处理Json数据
  10. 双击硬盘盘符打不开文件的处理方法
  11. vi测试仪维修成功率高吗?_欧森杰检测仪:臭氧检测仪的六大特点,您真的了解吗?...
  12. Java项目——个人博客系统
  13. matlab根据脉冲计算转速,求不规则脉冲之前的时间间隔,进而求出电机转速
  14. 成绩录取系统c语言,一个学生成绩管系统C语言源代码.doc
  15. 图像表格实线和虚线检测
  16. 0045-量化第十天:QMT-以DMA指标为例调用系统指标
  17. 慕课静态页面制作周记
  18. libvirt live migration 流程
  19. HUSTOJ超级详细部署文档
  20. 下载文件、根据链接生成二维码

热门文章

  1. 使用O2OA二次开发搭建企业办公平台(十二)流程开发篇:报销审批流程需求和应用创建
  2. BUPT OJ105 寻找宝藏
  3. TTL芯片计算机组装手册,芯片手册
  4. 知识分享!电源的工作原理是什么?-道合顺大数据Infinigo
  5. 深度解读敏捷思维与敏捷开发实践
  6. docker安装青龙
  7. 黑客总是如此神秘,他们是怎样成为虚拟世界的主人?
  8. HNUSTOJ-1690 千纸鹤
  9. ElasticSearch学习笔记(01)
  10. 【点云上采样】三维点云特征上采样