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

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

2016-06-15 14:02 453 查看
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)
}
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息