PHAsset

  • 父类:NSObject

展示一张Live Photo——这个照片包含了拍摄时刻之前以及之后的动作和声音。

一、概述

在iOS和tvOS中,你可以使用这个类来从用户的图库中(使用PHAssetPHImageManager类获取)引用Live Photo,在其他的位置(如通过社交网络分享图片)使用获得的数据来加载展示Live Photo对象,并将Live Photo加载在PHLivePhotoView上来进行展示。
在iOS和tvOS,以及MacOS中,你可以使用这个类来在一个照片编辑扩展中展示编辑Live Photo的过程。

注意
关于如何将Live Photo和你的应用的用户体验整合到一起,请查看iOS Human Interface Guidelines中的Live Photos

PHLivePhoto类对于Live Photo同UIImageNSImage)对于静态图片的作用是一样的。一个UIImage或者NSImage对象并不是一张图片的加载的数据文件,而是一个可以被展示在视图中的准备使用的图片——同样的,一个PHLivePhoto对象标示的是一个已经准备好使用PHLivePhotoView展示动作和声音的Live Photo,不是照片库的一个入口也不是构成一个Live Photo的数据源。(想要Live Photo作为照片库的元素,请使用PHAsset类。想要使用构成一个Live Photo的数据源,请使用PHAssetResource类。)

提示
想要在网页上展示Live Photo的内容,请使用LivePhotosKit JS框架。

二、内容

1. 检查一个Live Photo

@property(readonly, nonatomic) CGSize size;

Live Photo的大小。

2. 从数据文件中加载一个Live Photo

+ (PHLivePhotoRequestID)requestLivePhotoWithResourceFileURLs:(NSArray<NSURL *> *)fileURLs placeholderImage:(UIImage *)image targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode resultHandler:(void (^)(PHLivePhoto *livePhoto, NSDictionary *info))resultHandler;
  • fileURLs NSArray - 一个URL的数组,这个数组包含了多个构成一个Live Photo的资源的URL,获得URL请使用PHAssetResource类。
  • image UIImage - Live Photo的全部内容被加载并显示之前的替代图片。
  • targetSize CGSize - 想要的Live Photo的大小。传入CGSizeZero则为Live Photo的原始大小。
  • contentMode PHImageContentMode - 如何将图像与所请求的大小的纵横比相匹配。详细内容请查看PHImageContentMode
  • resultHandler block - 图片被加载完成的回调。
  • livePhoto PHLivePhoto - 请求的Live Photo。
  • info NSDictionary - 关于请求状态的信息。具体内容请查看下面Result Handler Info Dictionary Keys

从给定的源文件中异步加载一个Live Photo。将会返回一个用来标示请求的唯一的ID。
使用这个方法从之前在照片库中获取的数据文件中加载用来展示的Live Photo对象。例如,社交网络应用可以使用PHAssetResource来获取一个用户的照片库中构成一个Live Photo的数据文件,并将它们上传到服务器。然后,在另一个用户的设备中,这个应用下载这些数据文件并且使用这个方法来重新创建一个Live Photo对象来使用PHLivePhotoView类进行展示。

注意
想要获取一个表示一个在用户照片库中的Live Photo资源的PHLivePhoto对象,使用PHAsset类定位资源并用PHImageManager类来获取资源的Live Photo数据来进行展示。
想要向照片库中引入一个Live Photo,请使用PHAssetCreationRequest类。

这个方法是异步的。Photos在后台线程中加载、验证以及准备数据,然后调用你的resultHandler回调并传入一个已经准备好进行展示的Live Photo对象。同PHImageManager中类似的方法一样,Photos可以不止一次的调用你的resultHandler回调——第一次,提供一个低质量的Live Photo对象(只包含方法的image参数中的静态图像),然后之后会返回一个全部的动作和声音内容的Live Photo。如果在你的resultHandler回调中的info字典中PHLivePhotoInfoIsDegradedKey对应的值为YESPhotos还将会再次调用你的resultHandler回调。
这个方法可以从一个之前获取的Live Photo资源中的相同的文件集合加载一个PHLivePhoto对象。当你使用这个方法,Photos会验证这些文件以及他们的源数据是否可以作为一个Live Photo被加载。如果Photos不能从给定的文件中加载一个Live Photo,你的resultHandler回调中的result参数则为nil,并且info字典将包含一个NSError对象来描述错误。

Result Handler Info Dictionary Keys

  • NSString *const PHLivePhotoInfoErrorKey;
    加载请求的照片时发生错误。值为一个NSError对象。
  • NSString *const PHLivePhotoInfoIsDegradedKey;
    标示当前返回的livePhoto是否是请求的照片的临时低质量的结果。如果为YES,回调在之后还会调用来返回完整的Live Photo的数据。
  • NSString *const PHLivePhotoInfoCancelledKey;
    加载请求的照片是否被取消。
+ (void)cancelLivePhotoRequestWithRequestID:(PHLivePhotoRequestID)requestID;

取消一个异步请求。
当你使用上面的方法异步请求从源文件中加载一个Live Photo,这个方法会返回这个请求的一个数值标识。想要在这个请求完成前取消这个请求,调用此方法并传入这个请求的数值标识。

推荐阅读更多精彩内容