美文网首页程序员
PhotoKit -- 那些年的那些坑

PhotoKit -- 那些年的那些坑

作者: 是什么让我们拥抱 | 来源:发表于2017-08-07 14:29 被阅读0次

背景

近期在做一些图片及视频处理方面的工作,顺便把遇到的关于photokit 的一些坑及需要注意的地方记录下来,如能给道友一针定是极好的.此文篇幅较小非教学内容,如有相关需求有大量资源.

1. localIdentifier

1.1 Photos 框架中的基类 PHObject 只有一个公开接口 localIdentifier,是对象唯一唯一标志符. 
    PHObject 实现了 -isEqual 和 -hash 方法.可以直接使用这个属性进行对比是否同一个对象.

2. PHImageManager

2.1 PHImageManager 在框架中是个单例对象,它提供了加载图片和视频的方法.
    默认情况下,这些API是异步执行.在播放视频时需要注意回主线程后再进行播放.

2.2 resizeMode 默认是 None,这也造成了返回图像尺寸与要求尺寸不符.
    要返回一个指定尺寸的图像需要避免两层陷阱:一定要指定 options 参数,resizeMode 不能为 None.

    synchronous: 指定请求是否同步执行.
    resizeMode: 对请求的图像怎样缩放. 有三种选择:
        None: 不缩放;
        Fast: 尽快地提供接近或稍微大于要求的尺寸;
        Exact: 精准提供要求的尺寸;
    deliveryMode: 图像质量. 有三种值: 
        Opportunistic: 在速度与质量中均衡; 
        HighQualityFormat: 不管花费多长时间,提供高质量图像;
        FastFormat: 以最快速度提供好的质量(在 synchronous 为 true 时有效). 
      
2.3 synchronous 为 NO 状态下 resultHandler 会被多次调用,
    即先返回较低质量,再返回较高质量, YES 状态则直接返回要求图片.

2.4 通过 requestAVAssetForVideo: options: resultHandler: 方法获取视频资源或信息,
    返回的 AVAsset 对象不一定都为 AVURLAsset,有可能为其他类型(例: AVComposition 等).

3. iCloud

3.1 PHImageResultIsInCloudKey: 图像是否必须从 iCloud 请求,这个有巨坑.
    获取图像时可通过此 key 对其'位置'进行区分,即原图是否在本地.

    而获取视频时,当 networkAccessAllowed = NO 时(YES 暂未亲测),是不能使用这个 key 判断的.
    虽然苹果在9.0以上为 PHAsset 这个类增加了 sourceType 这个属性,我们能获取资源来源,
    但是,依旧不是也不能通过这个属性获取到视频是否在本地,本人暂时通过 urlAsset.URL 进行判断.但是!但是!视频可以正常播放不代表本地视频是完整的.

    同时9.0也新增了 PHAssetResourceManager 这个类用来获取媒体资源,有兴趣可以进行了解.

4. PHPhotoLibrary

4.1 在photoLibraryDidChange(changeInfo: PHChange!)的实现里将所有处理放在主线程里处理;

4.2 所有 PHPhotoLibrary 的观察者都会收到通知,不管观察者本身引用的内容是否发生变化,因此要根据观察者的情况来对通知进行过滤.
    从参数 PHChange 对象里能获得所有的变化,通过 changeDetailsForObject: 和 changeDetailsForFetchResult: 来获取细节.
    changeDetailsForObject: 获取的细节只是 PHObject 子类对象本身的信息变化,包括是否有成员被删除以及是否有图像或视频发生变化两种信息,有用信息实在有限,要处理成员变化需要依靠后者;
    对一个 PHFetchResult 对象使用 changeDetailsForFetchResult: 获取的细节中只包含该 PHFetchResult 对象变化的信息,可以利用这点来对通知进行过滤处理。

4.3 通过 changeDetailsForFetchResult: 获取的 PHFetchResultChangeDetails 对象,包含了 FetchResult 的结果的所有变化情况以及 FetchResult 的成员变化前后的数据,需要注意的是成员变化的通知。
IMG_0097.JPG

就到这里吧,如有疑问或建议欢迎道友们补充交流.如需要源码请评论...

相关文章

  • PhotoKit -- 那些年的那些坑

    背景 近期在做一些图片及视频处理方面的工作,顺便把遇到的关于photokit 的一些坑及需要注意的地方记录下来,如...

  • PhotoKit那些坑

    1.首先说第一个坑我们项目是一个老的项目图片选择,浏览都是用的ALAssetsLibrary这个框架,但是自从iO...

  • 那些年,那些坑

    Java 子父类相互转换 这个涉及到面向对象特性之多态,考验你对这个特性理解是否彻底,接下来举例两个常用的 API...

  • 那些年,那些坑

    Java 子父类相互转换 这个涉及到面向对象特性之多态,考验你对这个特性理解是否彻底,接下来举例两个常用的 API...

  • 屏幕适配的那些坑

    屏幕适配的那些坑 屏幕适配的那些坑

  • UITableView嵌套WKWebView的那些坑

    UITableView嵌套WKWebView的那些坑 UITableView嵌套WKWebView的那些坑

  • 【Python 100天从新手到大师】那些年我们踩过的那些坑

    那些年我们踩过的那些坑 坑1 - 整数比较的坑 在 Python 中一切都是对象,整数也是对象,在比较两个整数时有...

  • 那些年掉过的坑

    父母坑 妈妈说,西瓜的核子不能吞到肚子里去,不然头顶就长出西瓜来。然而有一次我把西瓜核吞咽下去了,诚惶诚恐的度过了...

  • 那些年跳过的坑

    最近,我团队一个伙伴跟我说,她想筹钱升级为高级合伙人,被我一口回绝了,然后开始语重心长的跟她分析,她该怎么走下去。...

  • 那些年走过的坑!

    记得读大二的时候,一位大四的学长语重心长的跟我分享他的大学感受。他说,他的大学四年学到东西最多的是大三大四,巴拉巴...

网友评论

    本文标题:PhotoKit -- 那些年的那些坑

    本文链接:https://www.haomeiwen.com/subject/xumolxtx.html