iOS-PhotoKit

PhotoKit是iOS8出的一个新的图片选择框架,用来取代以前的AssetsLibrary框架,相比较AssetsLibrary来说PhotoKit更加灵活,而在iOS9中,AssetsLibrary已经被弃用,也不支持LivePhoto,并且使用AssetsLibrary时,图片的分辨率会变低,接下来就介绍一下PhotoKit。

一、PhotoKit 基本构成

1.PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源
2.PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值
3.PHAssetCollection: PHCollection 的子类,表示一个相册或者一个时刻,或者是一个「智能相册(系统提供的特定的一系列相册,例如:最近删除,视频列表,收藏等等,如下图所示)
4.PHFetchResult: 表示一系列的资源结果集合,也可以是相册的集合,从?PHCollection 的类方法中获得
5.PHImageManager: 用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions 控制资源的输出尺寸等规格
6.PHImageRequestOptions: 如上面所说,控制加载图片时的一系列参数

二、获取相册里面的图片

    // 1.请求选项设置
    self.options = [[PHImageRequestOptions alloc] init];
    self.options.resizeMode = PHImageRequestOptionsResizeModeExact;//自定义图片大小的加载模式
    self.options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    self.options.synchronous = NO;// 是否同步加载

    // 2.容器类    
    // 获取所有资源的集合,并按资源的创建时间排序
    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
    fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
    self.assets = [PHAsset fetchAssetsWithOptions:fetchOptions];


获取图片资源

      [[PHImageManager defaultManager] requestImageForAsset:assets[index] targetSize: CGSizeMake(300, 300) contentMode:PHImageContentModeAspectFill options:_options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            // 返回图片
            image = result;
        }];

三、获取相册集

1.获取系统相册,就是手机创建好的相册

  PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

     for (PHAssetCollection *collection in smartAlbums) {
        PHFetchResult *results = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
        // NSLog(@"相册名:%@,有%ld张图片",collection.localizedTitle,results.count);
        // 存储assets's名字
        [self.albumNameArr addObject:collection.localizedTitle];
        // 存储assets's内容
        [self.albumAssetsArr addObject:results];
    }

2.用户自定义的相册资源

    PHFetchResult *customCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

    for (PHAssetCollection *collection in customCollections) {
        PHFetchResult *assets = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
        [self.albumNameArr addObject:collection.localizedTitle];
        [self.albumAssetsArr addObject:assets];
    }

根据需求选择相册类型+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsWithType:(PHAssetCollectionType)type subtype:(PHAssetCollectionSubtype)subtype options:(nullable PHFetchOptions *)options;

四、获取相册里视频集

1.获取视频集

    // PHFetchOptions中的谓词过滤获取
    PHFetchOptions *fetchOption = [[PHFetchOptions alloc] init];
    // 其中:key是PHAsset类的属性   这是一个KVC
    fetchOption.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:true]];
    //fetchOption.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeVideo];
    //self.assets = [PHAsset fetchAssetsWithOptions:fetchOption];
    // 视频类型 PHAssetMediaTypeVideo
    self.assets = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:fetchOption];

    self.options = [[PHVideoRequestOptions alloc] init];
    self.options.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;
    [self.options setNetworkAccessAllowed:true];

1.获取视频信息,包括时长和播放地址

   [[PHImageManager defaultManager] requestAVAssetForVideo:self.assets[indexPath.row] options:self.options resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
        dispatch_async(dispatch_get_main_queue(), ^{
           NSURL *URL = ((AVURLAsset*)asset).URL;
            _aVPlayerViewController = [[AVPlayerViewController alloc]init];
            _aVPlayerViewController.player = [[AVPlayer alloc]initWithURL:URL];
            [self presentViewController:_aVPlayerViewController animated:YES completion:nil];
                    });
    }];

五、相册里面现实中文

相册里面现实中文需要配置plist文件:

  1. 设置 Localization native development regioncn(中文),en (英文)。
  2. 设置 Localized resources can be mixedYES
    这里写图片描述

到这里基本上能获取到相册里所有信息了,具体的选择照片我这边还没有做,你们可以自己去实现,后边我们会加上去。

具体的代码在我的Demo里面,Demo里面有仿微信相册以及仿简书相册,大致框架有了,还没有去做详细的实现,大家可以下载下来看看,有好的建议和想法可以评论告诉我哈!PhotoKit比较详细的介绍可以看看这篇博文写的挺好的。

Demo下载地址:https://github.com/MichaelSSY/PhotoKitTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值