美文网首页
PhotoKit使用简单总结

PhotoKit使用简单总结

作者: Console_Liu | 来源:发表于2019-08-19 16:57 被阅读0次
    photoKit的基本构成有:
    • 1、PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源
    • 2、PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值
    • 3、PHAssetCollection: PHCollection 的子类,表示一个相册或者一个时刻,或者是一个「智能相册(系统提供的特定的一系列相册,例如:最近删除,视频列表,收藏等等,如下图所示)
    • 4、PHFetchResult: 表示一系列的资源结果集合,也可以是相册的集合,从 PHCollection 的类方法中获得
    • 5、PHImageManager: 用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions 控制资源的输出尺寸等规格
      PHImageRequestOptions: 如上面所说,控制加载图片时的一系列参数
    • 6、PHCollectionList,表示一组 PHCollection,它本身也是一个 PHCollection,因此 PHCollection 作为一个集合,可以包含其他集合,这使到 PhotoKit 的组成比 ALAssetLibrary 要复杂一些。另外与 ALAssetLibrary 相似,一个 PHAsset 可以同时属于多个不同的 PHAssetCollection,最常见的例子就是刚刚拍摄的照片,至少同时属于“最近添加”、“相机胶卷”以及“照片 - 精选”这三个 PHAssetCollection.
    概念图:
    photokit.png
    eg:
    // 获得系统相机胶卷(不同iOS系统版本,中文名可能不一致,iOS 12:所有照片,iOS 13:最近项目)
    PHAssetCollection *cameraRolls = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil].firstObject;
    //获取所有自定义相簿
    PHFetchResult *albumCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:(PHAssetCollectionSubtype)0 options:nil];
    // 获得系统视频相簿
    PHFetchResult *videoCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumVideos options:nil];
    
    • PHAssetCollectionType/PHAssetCollectionSubtype 翻译如下:
    // 通过这个方法以及PHAssetCollectionType和PHAssetCollectionSubtype参数,就能获取你想要的相册了。
    + (PHFetchResult *)fetchAssetCollectionsWithType:(PHAssetCollectionType)type subtype:(PHAssetCollectionSubtype)subtype options:(nullable PHFetchOptions *)options;
    
    // PHAssetCollectionType的所有参数
    typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
        PHAssetCollectionTypeAlbum      = 1, // 相册,系统外的
        PHAssetCollectionTypeSmartAlbum = 2, // 智能相册,系统自己分配和归纳的
        PHAssetCollectionTypeMoment     = 3, // 时刻,系统自动通过时间和地点生成的分组
    } PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
    
    typedef NS_ENUM(NSInteger, PHAssetCollectionSubtype) {
    
        // PHAssetCollectionTypeAlbum regular subtypes
        PHAssetCollectionSubtypeAlbumRegular         = 2, // 在iPhone中自己创建的相册
        PHAssetCollectionSubtypeAlbumSyncedEvent     = 3, 
        PHAssetCollectionSubtypeAlbumSyncedFaces     = 4, // 从图片app中导入的人物照片
        PHAssetCollectionSubtypeAlbumSyncedAlbum     = 5, // 从图片app导入的相册
        PHAssetCollectionSubtypeAlbumImported        = 6,
    
        // PHAssetCollectionTypeAlbum shared subtypes
        PHAssetCollectionSubtypeAlbumMyPhotoStream   = 100, // 照片流,照片流和iCloud有关,如果在设置里关闭了iCloud开关,就获取不到了
        PHAssetCollectionSubtypeAlbumCloudShared     = 101, // iCloud的共享相册,点击照片上的共享tab创建后就能拿到了,但是前提是你要在设置中打开iCloud的共享开关(打开后才能看见共享tab)
    
        // PHAssetCollectionTypeSmartAlbum subtypes
        PHAssetCollectionSubtypeSmartAlbumGeneric    = 200, 
        PHAssetCollectionSubtypeSmartAlbumPanoramas  = 201, // 全景图、全景照片
        PHAssetCollectionSubtypeSmartAlbumVideos     = 202, // 视频
        PHAssetCollectionSubtypeSmartAlbumFavorites  = 203, // 标记为喜欢、收藏
        PHAssetCollectionSubtypeSmartAlbumTimelapses = 204, // 延时拍摄、定时拍摄
        PHAssetCollectionSubtypeSmartAlbumAllHidden  = 205, // 隐藏的
        PHAssetCollectionSubtypeSmartAlbumRecentlyAdded = 206, // 最近添加的、近期添加
        PHAssetCollectionSubtypeSmartAlbumBursts     = 207, // 连拍
        PHAssetCollectionSubtypeSmartAlbumSlomoVideos = 208,
        PHAssetCollectionSubtypeSmartAlbumUserLibrary = 209, // 相机胶卷
        PHAssetCollectionSubtypeSmartAlbumSelfPortraits PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 210, // 使用前置摄像头拍摄的作品
        PHAssetCollectionSubtypeSmartAlbumScreenshots PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 211, // 屏幕截图
        PHAssetCollectionSubtypeSmartAlbumDepthEffect PHOTOS_AVAILABLE_IOS_TVOS(10_2, 10_1) = 212,
        PHAssetCollectionSubtypeSmartAlbumLivePhotos PHOTOS_AVAILABLE_IOS_TVOS(10_3, 10_2) = 213, // Live Photo资源
        PHAssetCollectionSubtypeSmartAlbumAnimated PHOTOS_AVAILABLE_IOS_TVOS(11_0, 11_0) = 214,
        PHAssetCollectionSubtypeSmartAlbumLongExposures PHOTOS_AVAILABLE_IOS_TVOS(11_0, 11_0) = 215,
        // Used for fetching, if you don't care about the exact subtype
        PHAssetCollectionSubtypeAny = NSIntegerMax
    } PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
    

    reference
    1、iOS 基于PhotoKit框架的自定义相册
    2、基于 PhotoKit 框架封装

    相关文章

      网友评论

          本文标题:PhotoKit使用简单总结

          本文链接:https://www.haomeiwen.com/subject/xdhesctx.html