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