前言

hihi,勇敢的小伙伴儿们大家好啊~忙里偷闲,学习一点新东西所以来给大家分享来了~

这次学习的东西非常简单,展示LivePhoto的功能~

为什么要学这个,哈哈哈,当初LivePhoto第一次出现的时候,我没有学它,后来微博出现了,我不以为意。直到抖音上线了带火了LivePhoto的生成功能,我才对这个起了兴趣,我自己也生成了一些LivePhoto作为我的锁屏背景,甚是有趣!但是!搜索生成LivePhoto的过程中,我没找到想找到的,我只是看到了展示LivePhoto的功能,就是微博上能够展示LivePhoto的效果,所以先把这个学了吧,由浅入深,很多东西就会变简单~

正文

Demo传送门:展示LivePhoto的Demo

首先,这个功能很简单很简单,主要的核心内容就是用PHLivePhotoView吧LivePhoto展示出来,这个PHLivePhotoView是官方给我们的一个类,需要导入Photos和PhotosUI的框架,然后PHLivePhotoView和UIImageView是一样的操作,只是UIImageView有的是image属性,PHLivePhotoView是LivePhoto的属性。PHLivePhotoView还提供了两种LivePhoto的动态效果。一种是持续数秒,我亲测效果就是自动播放几秒,还有一种是全部循环展示,这种是自动播放全部内容的效果。这里我后面再说,大家了解就好。

android 仿微博查看大图 安卓微博能看到live图_android 仿微博查看大图

话不多说,上代码。

准备工作

1.准备的真机是iPhone 6s及以上机型测试,6s以下机型不支持LivePhoto。

2.为了适配iOS10,请先在info.plist中设置隐私权限Privacy - Photo Library Usage Description.

我们需要调用UIImagePickerController获取手机相册中的Photo和LivePhoto展示。

3.添加MobileCoreServices框架,后面设置UIImagePickerController的mediaTypes需要。

4.添加Photos和PhotosUI框架,使用PHLivePhotoView需要。

正式开始

5.调用UIImagePickerController,设置代理时遵守UIImagePickerControllerDelegate和UINavigationControllerDelegate协议。

UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    ipc.delegate = self;
    NSArray *mediaTypes = @[(NSString *)kUTTypeImage,(NSString *)kUTTypeLivePhoto];
    ipc.mediaTypes = mediaTypes;
    [self presentViewController:ipc animated:YES completion:nil];

6.代理方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    [self dismissViewControllerAnimated:YES completion:^{
        PHLivePhoto *photo = [info objectForKey:UIImagePickerControllerLivePhoto];
        if (photo) { //LivePhoto
            for (UIView * view in self.view.subviews) {
                if ([view isKindOfClass:[UIImageView class]] || [view isKindOfClass:[PHLivePhotoView class]]) {
                    [view removeFromSuperview];
                }
            }
            PHLivePhotoView *photoView = [[PHLivePhotoView alloc] initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, self.view.frame.size.height - 60)];
            photoView.livePhoto = photo;
            photoView.contentMode = UIViewContentModeScaleAspectFit;
            [self.view addSubview:photoView];
            //持续数秒效果
//            [photoView startPlaybackWithStyle:PHLivePhotoViewPlaybackStyleHint];
            //全部循环展示效果
//            [photoView startPlaybackWithStyle:PHLivePhotoViewPlaybackStyleFull];
            //停止动画
            //[photoView stopPlayback];

        } else { //普通照片
            for (UIView * view in self.view.subviews) {
                if ([view isKindOfClass:[PHLivePhotoView class]] || [view isKindOfClass:[UIImageView class]]) {
                    [view removeFromSuperview];
                }
            }
            UIImageView *photoView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, self.view.frame.size.height - 60)];
            photoView.image = [info objectForKey:UIImagePickerControllerOriginalImage];
            photoView.contentMode = UIViewContentModeScaleAspectFit;
            [self.view addSubview:photoView];
        }
    }];
}

其中注释掉了持续数秒和全部循环展示效果,小伙伴儿们可自行体验其效果~


好了,展示LivePhoto的教程到此结束~