Swift/Objective-C下按媒体类型自定义图片选择器方案咨询
适配iOS 12+的多类型媒体选择器替代方案
UIImagePickerController本身仅支持基础的图片/视频大类过滤,无法满足细分媒体类型筛选的需求,以下是iOS 12+可用的替代方案:
成熟开源库替代方案
- TZImagePickerController:国内广泛使用的轻量Objective-C编写的媒体选择组件,完全兼容iOS 12+,支持按静态照片、Live Photo、视频、慢动作视频等类别单独筛选,自带单选/多选切换、预览、裁剪等常用功能,API配置灵活,绝大多数定制需求都可以通过暴露的参数实现,不需要修改源码。
- BSImagePicker:纯Swift实现的媒体选择组件,支持iOS 12+,类型过滤逻辑和UI高度可定制,支持单独筛选实况照片、慢动作等特殊媒体类型,代码结构清晰,适合纯Swift项目接入。
- 基于官方
PHPickerViewController做兼容封装:iOS 14及以上版本苹果官方推出的PHPicker本身就支持按媒体类型过滤、多选、Live Photo/慢动作视频筛选,iOS 12版本下可以配套自定义的PhotoKit实现做降级,这套方案维护成本最低,没有第三方依赖风险。
原生自行实现方案
如果不想引入第三方依赖,可以完全基于PhotoKit框架自行实现:
实现核心逻辑如下:
- 首先调用
PHPhotoLibrary的相关接口申请相册访问权限 - 按需要展示的媒体类型构造
PHFetchOptions过滤规则:- 筛选Live Photo:设置predicate为
mediaType == PHAssetMediaTypeImage AND (mediaSubtypes & PHAssetMediaSubtypePhotoLive) != 0 - 筛选慢动作视频:设置predicate为
mediaType == PHAssetMediaTypeVideo AND (mediaSubtypes & PHAssetMediaSubtypeVideoHighFrameRate) != 0 - 普通视频、静态照片等也可以通过对应的
PHAssetMediaType和PHAssetMediaSubtype组合实现精准筛选
- 筛选Live Photo:设置predicate为
- 用
UICollectionView自定义展示列表布局,自行实现单选/多选的交互逻辑,配合PHCachingImageManager做媒体资源的缩略图加载和全屏预览
这种方案完全可控,所有交互和筛选规则都可以根据业务需求自定义,适配性也最高。
内容的提问来源于stack exchange,提问作者sagarthecoder
相关产品推荐
相关产品推荐

