iOS livephoto 2022-02-23

2022-02-23  本文已影响0人  ZM_微笑向阳

最近做了一个壁纸类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:@"保存失败"];
                }
            }];
上一篇 下一篇

猜你喜欢

热点阅读