您的位置:首页 > 移动开发 > Swift

【swift3.0】【自定义相册】【Photos.framework】

2016-12-08 00:00 197 查看
贡献作者 -【XJDomain】
博客XJ: https://my.oschina.net/shengbingli/blog GitHub直播地址: https://github.com/lishengbing/XJDomainLive

-IOS8.0+后,苹果开始推荐使用Photos.framework来自定义相册



-PhotosKit的框架类的解释

01-PHPhotoLibrary :是一个资源库,能够获取相册权限和对相册的操作

02-PHAssetCollection : 是一个资源集合对象,相当于一个相册的概念

01- 拿到所有系统的智能相册组:

// 1.1 列出所有系统的智能相册
let smartAlbumsFetchResult = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: nil)

02-取出所有用户自定义的相册组

// 1.3取出所有用户创建的相册
let topLevelUserCollections = PHCollectionList.fetchTopLevelUserCollections(with: nil)

03-PHFetchResult : 是一个结果集,一个范集类,上面获取到的智能相册组和自定义相册组 就是被封装成改类中返回给我们的,我们需要遍历上面 相册资源组 拿到我们每一个相册里面的所有单独资源

01-分别遍历上面的智能相册和用户自定义相册,得到每一个相册中的单独资源信息

// 懒加载模型数组:相簿列表数据
fileprivate lazy var albums : [AlbumItem] = [AlbumItem]()

// 获取相册列表
fileprivate func getAlbumLists(_ collection : PHFetchResult<PHAssetCollection>) {
for index in 0..<collection.count {
// 获取当前相簿内的照片
let resultOptions = PHFetchOptions()
resultOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
// 只获取图片资源(排除音视频资源)
resultOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
let assetCollection = collection[index]
let assetFetchResult = PHAsset.fetchAssets(in: assetCollection, options: resultOptions)

// 没有图片的空相簿不显示
if assetFetchResult.count > 0 {
let items = AlbumItem(title: assetCollection.localizedTitle!, fetchResult: assetFetchResult as! PHFetchResult<AnyObject>)
let resource = getFirstImageAtPHFetchResult(assetFetchReult: assetFetchResult)
items.firstImage = resource.firstImage
items.info = resource.info
albums.append(items)             }
}
}

// 遍历assetFetchReult结果集,可以得到每一个单独照片
let cacheImageManager = PHCachingImageManager()
let asset = assetFetchReult.firstObject!
cacheImageManager.stopCachingImagesForAllAssets()
cacheImageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: nil) { (image : UIImage?, info : [AnyHashable : Any]?) in
}

04-PHAsset 是一个独立的资源对象,可以通过类方法对PHCollection对象进行遍历,获得存放Asset对象的结果集,可以直接获得资源的规格数据,若想获得图片以及原图等资源,需要配合PHImageManager对象,继承自PHObject.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息