iOS开发------简单实现图片多选功能(Photos.framework篇)

这篇博客介绍了如何利用iOS8后的Photos.framework替代AssetsLibrary.framework来实现图片多选功能。文章详细讲解了Photos.framework中的核心类和方法,包括PHPhotoLibrary、PHAssetCollection、PHAsset等,并提供了相关代码示例。同时,博主提醒开发者在使用相册资源库时要注意权限设置,并提供了Objective-C和Swift的Demo链接。
摘要由CSDN通过智能技术生成

Photos.framework是iOS8后苹果推出的一套替代AssetsLibrary.framework获取相册资源的原生库,至于AL库,欢迎大家给博文iOS开发——简单实现图片多选功能(AssetsLibrary.framework篇)提出宝贵的意见。

楼主大部分都是查看官方开发文档进行探索的(当然,实在不明白了也会请求google 的 0.0 )。这里就说一下个人的看法吧,相比AL库,Photos的开发文档显然更像是目前我们接触的ObjC语言(如果不信,可以对比一下AL库和Photos库的开发文档)。初次接触这个库的时候可能会感觉比较乱,毕竟类的数量比AL库多了好多,但在熟悉大体逻辑之后,就会发现它的分工比AL更加明确,并且使用起来要比AL灵活的多。

提醒一下,要使用相册资源库的时候,为了适配一下将来的iOS10,不要忘记在info.plist文件中加入NSPhotoLibraryUsageDescription这个描述字段啊,更多的权限坑请关注一下博文 iOS开发——iOS 10 由于权限问题导致崩溃的那些坑

ObjC- 全代码 : https://github.com/RITL/RITLImagePickerDemo

2017-01-22 更新

Swift - 全代码:https://github.com/RITL/Swift-RITLImagePickerDemo

Swift-Demo 重写完不久,可能Swift的编程思想还不是领略的很好,但楼主会继续努力。


Objc-Demo的用法如下:

RITLPhotoNavigationViewModel * viewModel = [RITLPhotoNavigationViewModel new];

__weak typeof(self) weakSelf = self;

//    设置需要图片剪切的大小,不设置为图片的原比例大小
//    viewModel.imageSize = _assetSize;

viewModel.RITLBridgeGetImageBlock = ^(NSArray <UIImage *> * images){

    //获得图片
    __strong typeof(weakSelf) strongSelf = weakSelf;

    strongSelf.assets = images;

    [strongSelf.collectionView reloadData];

};

viewModel.RITLBridgeGetImageDataBlock = ^(NSArray <NSData *> * datas){

    //可以进行数据上传操作..


};

 RITLPhotoNavigationViewController * viewController = [RITLPhotoNavigationViewController photosViewModelInstance:viewModel];

[self presentViewController:viewController animated:true completion:^{}];

Swift- Demo用法

//获得控制器
let viewController : RITLPhotoNavigationViewController = RITLPhotoNavigationViewController()

//设置viewModel属性
let viewModel = viewController.viewModel

// 获得图片
viewModel.completeUsingImage = {(images) in


}

// 获得资源的data数据
viewModel.completeUsingData = {(datas) in

    //coding for data ex: uploading..
    print("data = \(datas)")
}

self.present(viewController, animated: true) {}

话说的有点多了,下面就谈谈个人对Photos的理解,这里只记录一下Photos.framework中类的使用与理解,真正的实现多选功能请前去上面的链接下载demo查看,多谢指正:

类逻辑

研究一个库或者框架,总体逻辑一定是要缕清的,下面就是个人对photos的理解,有点多,分类一下吧:

资源类

  • PHPhotoLibrary 是一个资源库。能够获取相册权限以及对相册的操作,与AL不同,它不能获取资源对象哦.
  • PHFetchResult 是一个结果集,一个泛型类。通过方法获取到的相册或者资源组就是被封装成该类返回.
  • PHAssetCollection 是一个资源集合对象。其实它就是一个相册的概念,可通过类方法获得想要的相册集合,继承自PHCollection.
  • PHCollectionList 是一个资源集合列表对象。刚接触时以为它是存放PHCollection对象的集合,后来才知道,如果想要通过地点以及时间分组的话,请使用这个类替代PHAssetCollection吧,用法与PHAssetCollection类似,同样是继承自PHCollection.
  • PHAsset 是一个独立的资源对象。可以通过类方法对PHCollection对象进行遍历,获得存放Asset对象的结果集,可以直接获得资源的规格数据,若想获得图片以及原图等资源,需要配合PHImageManager对象,继承自PHObject.

工具类

  • PHFetchOptions 一个遍历配置类。一般情况下,当存在遍历方法的时候就存在这个类型的参数,里面含有谓词、遍历顺序等属性,可以通过设置这些属性,完成不同的遍历.
  • PHImageManager 是一个负责渲染资源的类。比如获得PHAsset对象的原图等操作需要使用该类.
  • PHCachingImageManager 继承自PHImageManager,可以对请求的资源对象进行缓存,这样再次获取时就不需要重新渲染,在加快获取速度的同时也降低了CPU的压力,这里最好对缓存的PHImageRequestID进行一下记录,防止同一资源被无限缓存的尴尬.
  • PHImageRequestOptions 是一个资源请求的配置类。通常在使用PHImageManager对某个资源进行请求时都会存在此类型的参数,可以在请求资源时对该对象进行设置,获得想要的结果,比如原图..

请求类

  • 请求类不能独立使用,要想发挥作用,需要与PHPhotoLibrary对象配合使用.
  • PHAssetCollectionChangeRequest 集合变化请求类,负责对PHAssetCollection对象的操作
  • PHCollectionListChangeRequest 集合变化请求类,负责PHCollectionList对象的操作
  • PHA
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值