3分钟搞定LivePhotos使用

三分钟搞定LivePhotos使用

前言

作为一个iOS开发者,大家都知道在苹果发布iPhone6s之后,iPhone在拍照时候就带了一个LivePhotos功能,如果打开就会在拍照时候同时生成一个视频。我自认为这个功能很不错,因为在许多拍照的时候抓拍到的效果会更好,而且LivePhotos是带声音的,这样的话它会帮我们记录下来很多快乐的,值得回忆的事情。那么很久之前就知道微博是支持这项功能的,那么下面我就介绍下LivePhotos在我们开发者手里是怎么使用的。

简介

LivePhoto由一张 JPG 图片以及一个 45 格 MOV 影片档所组成。在播放LivePhoto时,这段 MOV 则以 15 格 / 秒的速度来播放。因为结合了图片与影片,因此一个 Live Photo 相当于一张普通图片的 2倍大小。iOS9以上系统的iOS设备可以查看LivePhoto照片。大家可以按照我下面的内容自己动手写一个小Demo。

内容

引入框架

<Photos/Photos.h> <PhotosUI/PhotosUI.h> <MobileCoreServices/MobileCoreServices.h> 其中PhotosUI包含一个PHLivePhotoView类,它继承自UIView可以用来显示LivePhoto。

选取相册照片

因为是个Demo我们就使用系统访问图片的UIImagePickerController,要记得iOS10的权限问题在info.plist加入权限。我们顺带加入一个访问出错的判断。记得一定要设置mediaTypes,要不然代理方法不会返回LivePhotos。

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; NSArray *mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeLivePhoto]; picker.mediaTypes = mediaTypes; [self presentViewController:picker animated:YES completion:nil]; }else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"访问图片库错误" message:@"" delegate:nil cancelButtonTitle:@"OK!" otherButtonTitles:nil]; [alert show]; } 我们在代理方法里直接把获取到的照片赋给PHLivePhotoView,我直接实现了如果没有LivePhoto时候的判断,大家可以自行处理。

  • (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { [picker dismissViewControllerAnimated:YES completion:nil]; PHLivePhoto *photo = [info objectForKey:UIImagePickerControllerLivePhoto]; if (!photo) { NSLog(@"没有LinePhoto"); return; } self.livePhotoView.livePhoto = [info objectForKey:UIImagePickerControllerLivePhoto]; }

  • (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker dismissViewControllerAnimated:YES completion:nil]; } 实现播放

LivePhotos有三种播放模式分别是PHLivePhotoViewPlaybackStyleHint(预览播放),PHLivePhotoViewPlaybackStyleFull(完全播放),PHLivePhotoViewPlaybackStyleUndefined(不播放)。大家Demo可以都写出来看一下效果。

[self.livePhotoView startPlaybackWithStyle:PHLivePhotoViewPlaybackStyleHint]; 我们再在PHLivePhotoView的代理方法里面检测一下是否正在播放,避免出现正在播放的时候重新开始影响效果。

  • (void)livePhotoView:(PHLivePhotoView *)livePhotoView willBeginPlaybackWithStyle:(PHLivePhotoViewPlaybackStyle)playbackStyle { self.isAnimating = YES; }

  • (void)livePhotoView:(PHLivePhotoView *)livePhotoView didEndPlaybackWithStyle:(PHLivePhotoViewPlaybackStyle)playbackStyle { self.isAnimating = NO; } 然后在播放之前我们做一个判断就可以避免了

if (self.isAnimating) { [self.livePhotoView stopPlayback]; return; } [self.livePhotoView startPlaybackWithStyle:PHLivePhotoViewPlaybackStyleHint]; 写在最后

以上就是关于LivePhotos的初级使用,当然这个功能如果引入到项目当中,肯定会涉及到上传,以及兼容安卓设备的显示,那么七牛云已经解决了这个问题,而且调用非常方便 点击这里查看 。

转载于:https://my.oschina.net/jack088/blog/908333

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值