最近做了一个壁纸类app,涉及到了livephoto相关的内容,做个记录
基本思路
livephoto实际上是由一张jpg图片和一段mov视频组成,想要从网络后台获取livephoto, 后台应该是以一张图片对应一段视频的方式存储livephoto,手机端通过网络下载好对应的图片和视频之后.利用系统Photos.framew中提供的方法将图片和视频合成PHLivePhoto,之后可以通过PhotoUI中的PHLivePhotoView来展示PHLivePhoto对象,或者通过PHAssetCreationRequest的方法保存livephoto到相册
代码实现
首先导入framework,之后引入头文件
#import <Photos/Photos.h>
#import <PhotosUI/PhotosUI.h>
在下载完图片与视频并保存在本地之后,我们通过传入下载好的视频与图片的本地url来生成 PHLivePhoto对象
[PHLivePhoto requestLivePhotoWithResourceFileURLs:@[self.movUrl ,imgUrl] placeholderImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:imgUrl]] targetSize:self.imageView.bounds.size contentMode:PHImageContentModeAspectFill resultHandler:^(PHLivePhoto * _Nullable livePhoto, NSDictionary * _Nonnull info) {
}];
要展示livephoto, 需要创建PHLivePhotoView控件,再将上个方法得到的PHLivePhoto对象赋值给PHLivePhotoView,之后PHLivePhotoView调用播放方法就可以开始展示livephoto了
self.livePhotoView = [[PHLivePhotoView alloc] init];//创建
self.livePhotoView.livePhoto = livePhoto;// 赋值
[self.livePhotoView startPlaybackWithStyle:PHLivePhotoViewPlaybackStyleFull]; // 播放
保存livephoto到相册
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCreationRequest * req = [PHAssetCreationRequest creationRequestForAsset];
[req addResourceWithType:PHAssetResourceTypePhoto fileURL:self.imgUrl options:nil];
[req addResourceWithType:PHAssetResourceTypePairedVideo fileURL:self.movUrl options:nil];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
[self showMessage:@"已保存至相册"];
}else
{
[self showMessage:@"保存失败"];
}
}];
网友评论