hello_vzjw

swift PhotoKit学习——swift(学习八)

PhotoKit是iOS新的框架,用来替代原来AssetsLibrary。所以这里只是大概介绍一下PhotosKit这个框架。

主要几个类介绍一下:

PHObject: 
    所有的PhotoKit对象都继承自PHObject抽象基类;

PHAsset:  
    代表相片库中的一个资源,照片或者视频,是最基础的数据元;

PHCollection:
    是一个抽象类,它的两个子类:PHAssetCollection:多个asset的集合,比如我们照片库中的一个相册或者一个时刻或者一个视频集合、最近添加项目等;PHCollectionList:有多个asset集合的集合,它自身是一个PHCollection,但是也包涵好几个PHCollection,比如我们在照片应用的时刻栏看到的时刻、精选、年度等,它和PHAssetCollection是没有很大关系的,不需要把它两联系在一起。换句话说,PHAssetCollection内存储的是asset集合,PHCollectionList存储的是多个asset集合的集合;

PHAssetCollection: 
    相当于图片或者视频的collection集

PHFetchOptions: 
    当我们使用PHAsset、PHCollection、PHAssetCollection、 PHCollectionList等类的类方法去获取资源实例的时候,使用PHFetchOptions的对象描述过滤类型,比如按日期、名称过滤等;

PHFetchResult: 
    获取到的一个有序的资源集合;

PHImageManager:
     用于管理加载图片或视频;

PHImageRequestOptions、PHVideoRequestOptions:
     控制加载图片\视频资源时的一些附加参数,比如照片质量、是否联网等;

获取资源

PhotosKit 获取的资源都是通过PHAsset、PHCollection、PHAssetCollection、 PHCollectionList等类形如 class func fetchXX(… , optional:xxx)->PHFetchResult的方法获取。
例如:

//获取图库所有资源
let assetOptions = PHFetchOptions()
assetOptions.sortDescriptors?.append(NSSortDescriptor(key:"createDate",ascending:true))
let allAssets = PHAsset.fetchAssetsWithOptions(assetOptions)

//获取智能相册,所谓智能相册就是苹果手机图库照片模块里的时刻、精选、年度等
let smartAlbums = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.SmartAlbum,subtype:PHAssetCollectionSubtype.AlbumRegular,options:nil)

//获取用户自定义相册,自己创建的额相册
let userAblums = PHCollectionList.fetchtopLevelUserCollectionsWithOptions(nil)

ok,到了这里我要特别提醒一下了,以上三个拿到的虽然都是PHFetchResult,但是只有获取的所有的相册里返回的PHFetchResult存储的PHAsset。其它的两个存储的都是PHAssetCollection(资源集合),例如我们拿取最基础的PHAsset资源:

//使用所有相册里的第一个资源:
let asset = allAssets.firstObject as! PHAsset
//使用smart第一个相册集的第一个资源
let collection = smartAlbums[0] as! PHAssetCollection
let phFetchSult = PHAsset.fetchAssetsInAssetCollection(collection,options:nil)
let asset = phFetchSult.firstObject as! PHAsset

接下来,我们就可以使用我们的asset了。
当要展示某个asset的内容时,可以使用PHImageManager,它以异步加载、缓存、自适应等。PHCachingImageManager是它的子类,欲缓存的时候使用:

//加载图片       PHImageManager.defaultManager().requestImageForAsset(asset,                                              targetSize:CGSize(width: CGRectGetWidth(self.view.frame)/4, height: CGRectGetWidth(self.view.frame)/4),                                                     contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler: { (result, info) in  
                                                                                                                               cellItem.setPhotoImage(result!)                                                                
                                                                                                })

资源大概就这些了,那么相册的处理,我们有什么操作呢?

//创建一个新的相册:

PHPhotoLibrary.sharedPhotoLibrary().performChanges({          PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(name!)
                }, completionHandler: { (success, error) in
                    if !success {
                        print(error)
                    }
   })

posted on 2016-06-15 14:03  hello_vzjw  阅读(194)  评论(0)    收藏  举报

导航