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

贡献做者 -【XJDomain】
博客XJ:  https://my.oschina.net/shengbingli/blog
GitHub直播地址https://github.com/lishengbing/XJDomainLivegit

 

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

 

 

-PhotosKit的框架类的解释

01-PHPhotoLibrary :是一个资源库,可以获取相册权限和对相册的操做github

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

      01- 拿到全部系统的智能相册组:swift

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

      02-取出全部用户自定义的相册组数组

// 1.3取出全部用户建立的相册
         let topLevelUserCollections = PHCollectionList.fetchTopLevelUserCollections(with: nil)

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

      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.fetch

相关文章
相关标签/搜索