• iOS如何本地储存PHAsset 2019-06-11 13:31:33
    思路是在退出viewcontroller的时候储存PHAsset,下一次打开那个viewController的时候通过PHAsset去加载这个图片。 百度上搜索出的只有说需要储存PHAsset的localIdentifier,实际上看完我也很蒙,并没有人列出代码说...

    最近公司有个需求,需要缓存信息中要发送的照片,下次打开viewController的时候直接显示照片。思路是在退出viewcontroller的时候储存PHAsset,下一次打开那个viewController的时候通过PHAsset去加载这个图片。

    百度上搜索出的只有说需要储存PHAsset的localIdentifier,实际上看完我也很蒙,并没有人列出代码说具体的做法。下面描述一下我的具体做法。

    说在最前面,我确实是通过localIdentifier储存PHAsset的。

    点到PHAsset的头文件里面会发现没有localIdentifier这个属性,这个时候你再往父类里点,也就是PHObject里,就会发现有了。

    首先我们需要保存localIdentifier(如何存储NSString这里就不说了):

    NSString *localIdentifier = asset.localIdentifier;
    // 本地存储
    复制代码

    把这个字符串存下来是没有什么疑问了,然后下一次要怎么用呢?

    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[str] options:nil];
    PHAsset *asset = fetchResult.firstObject;
    复制代码

    上述这段代码就可以根据localIdentifier返回PHAsset,但是先返回的是一个PHFetchResult类型的对象,这个对象是什么呢,点到头文件里:

    @interface PHFetchResult<ObjectType> : NSObject <NSCopying, NSFastEnumeration>
    复制代码

    可以看出来他实现了NSCopying和NSFastEnumeration协议,也就是说他可以使用快速枚举和copy方法,而且从它的属性可以看出来它像是一个array。

    + (PHFetchResult<PHAsset *> *)fetchAssetsWithLocalIdentifiers:(NSArray<NSString *> *)identifiers options:(nullable PHFetchOptions *)options;
    复制代码

    因为上述这个方法是要传一个string泛型的数组进去,所以我传一个进去实际上就拿到一个PHAsset。

    所以

    PHAsset *asset = fetchResult.firstObject;
    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
    options.synchronous = YES;
    [[PHImageManager defaultManager]requestImageForAsset:asset targetSize:CGSizeMake(asset.pixelWidth, asset.pixelHeight) contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
    	[photos addObject:result];
    }];
    复制代码

    使用上述代码就可以通过PHAsset再次拿到你上次拿到的照片了。

    最后还有一个重点: 有时候用户会把手机上的照片删除了,如果删除的包含APP里储存的PHAsset,那么这种情况需要进行错误处理,不然会导致crash。在这种情况下使用fetchAssetsWithLocalIdentifiers这个方法返回的PHFetchResult为空,所以如下判断即可:

    PHAsset *asset = fetchResult.firstObject;
    if (!asset) {
    	// 处理照片删除的情况
    }
    复制代码

    转载于:https://juejin.im/post/5cd64cb8f265da036f4e9d41

    展开全文
  • //相簿列表项 struct HGImageAlbumItem { //相簿名称 var title:String? //相簿内的资源 var fetchResult:NSMutableArray? } 第一种:1. 计算系统的图片大小 ... func statisticPictureAssetsAllSiz...
  • 需求:获取并展示iOS设备内存储的图片、音频、视频 环境:Xcode10 库:PHPhotos.h,MediaPlayer 说明:设备内图片来自于相册,视频来自于相册和媒体库,音频来于自媒体库。 头文件引用: #import &lt;Photos/...
  • PhotoKit是iOS新的框架,用来替代原来AssetsLibrary。 PHAsset: PHFetchOptions: PHAsset、PHCollection
  • /*****************************保存图片*************************************/ //MARK: 将图片保存在相册 ///保存图片 --&gt; UIImageWriteToSavedPhotosAlbum func saveImageToAlbum(image:UIImage) { ...
  • Swift - 从相册中选择照片并上传(使用UIImagePickerController) 2016-05-13 08:35发布:hangge浏览:482 选择本地图片并上传是应用开发中一个比较常见的功能。   我们使用 ...
  • 首先发布Demo链接 Photos从相簿中获取图片效果展示 (一) Photos简介 在iOS 8之前,开发者只能用 AssetsLibrary 框架访问的用户的照片库。几年以来,相机应用和照片应用发生了显著的变化,增加了许多新特性,...
  • 该SDK设计参考微信选择,支持预览(支持网络图预览及删除)、多选、单张裁剪(一般头像上传用)。基本相关主要页面有相册选择列表、图片选择列表以及预览。仅支持iOS8以上系统。 GitHub源码一、系统资源的获取通过...
  • 选择本地图片并上传是应用开发中一个比较常见的功能。 原文出自:... 我们使用UIImagePickerController可以很方便的从系统“照片”中选择图片,但我们会发现选择完毕后,通过图片的info[UIImagePicke...
  • 最近在做IOS的系统分享,遇到了存储到相册里面的视频文件无法通过系统分享,分享到邮箱的问题,为了解决这个问题,就需要把系统相册中的视频写入到沙盒里面,通过沙盒的url进行分享处理。搜索的stackoverflow的网站...
  • 前言: 过去有个项目有了这个需求.当时选择从git上找了个框架直接来用,但是其中很多功能是我并不需要的,以及想要了解一下这一块的具体实现方式,就选择自己参考其重写了一下,主要运用的知识就是photos框架以及图片...
  • TimLiu-iOSgithub排名 https://github.com/trending,github搜索:https://github.com/searchObjective-C版本点击这里 欢迎加入QQ交流群: 594119878使用方法:根据目录关键字搜索,记得包含@,以保证搜索目录关键字...
  • ##关键词 控件 属性 VideoLine 扩展 逻辑 cgImage 访问 设计 自定义 交互 ... 如果本文对你有所帮助,请给个Star????...界面控件是所iOS程序重要的组成部分,用户可以通过它们与应用程序进行交互。苹果提供了一套强大的...
  • gif图片一定不要放在项的Images.xcassets中,放在项目其它地方就可以 NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@“1” withExtension:@“gif”];//加载GIF图片 CGImageSourceRef gifSource = ...
  • 1.使用Photos framework的PHPhotoLibrary保存照片到相册 2.ios10开始ALAssetsLibrary被标志为弃用(DEPRECATED),并建议使用Photos framework的PHPhotoLibrary
  • 请求图像(这里有巨坑)关于PHImageManager类,NSHipster 有篇总结文章不错。- requestImageForAsset:targetSize:contentMode:options:resultHandler:你不应该生成该类的实例,而应该使用该类的提供的单例对象。...
  • 一、imageNamed imageNamed的优点在于可以缓存已经加载的图片。苹果的文档中有如下说法:This method looks in the system caches for an image object with the specified name and returns that object if it ...
  • 这里不对视频的录制进行过多的阐述,发现ALAssetsLibrary存储视频代码在iOS9过期的弟兄们应该都已经做到了用ALAssetsLibrary存储视频这一块了,下面直接将贴iOS9之前使用的ALAssetsLibrary存储视频代码块替换成使用...
  • iOS10 相机相册等权限的使用、检测并引导用户开启权限  #import "ViewController.h" #import #import ...ViewController () UIImagePickerControllerDelegate,UINavigationControllerDel
  • iOS 相册的使用 2020-04-02 18:01:34
    常用类介绍 PHPhotoLibrary:该类用于表示设备和iCloud上所有的收藏和资源。可以使用一个共享实例以一种线程安全的方法对照片库的变化进行管理,比如添加新的资源和相簿,或者编辑和删除已有的资源或相簿,此外,...
1 2 3
收藏数 48
精华内容 19