三分钟搞定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的初级使用,当然这个功能如果引入到项目当中,肯定会涉及到上传,以及兼容安卓设备的显示,那么七牛云已经解决了这个问题,而且调用非常方便 点击这里查看 。