English
中文 |一款图片/视频选择器-支持LivePhoto、GIF选择、iCloud/网络资源在线下载、图片/视频编辑
功能
- UI 外观支持浅色/深色/自动/自定义
- 支持多选/混合内容选择
- 支持的媒体类型:
- Photo
- GIF
- Live Photo
- Video
- 支持的本地资源类型:
- Photo
- Video
- GIF
- Live Photo
- 支持的网络资源类型:
- Photo
- Video
- 支持下载iCloud上的资源
- 支持手势返回
- 支持滑动选择
- 编辑图片(支持动图、网络资源)
- 涂鸦
- 贴纸
- 文字
- 裁剪
- 旋转任意角度
- 自定义蒙版
- 马赛克
- 画面调整
- 滤镜
- 编辑视频(支持网络资源)
- 涂鸦
- 贴纸(支持GIF)
- 文字
- 配乐(支持歌词字幕)
- 裁剪时长
- 裁剪尺寸
- 旋转任意角度
- 自定义蒙版
- 画面调整
- 滤镜
- 相册展现方式
- 单独列表
- 弹窗
- 多平台支持
- iOS
- iPadOS
- 国际化支持
-
🇨🇳 简体中文 (zh-Hans) -
🇨🇳 繁体中文 (zh-Hant) -
🇬🇧 英文 (en) -
🇯🇵 日语 (ja) -
🇰🇷 韩语 (ko) -
🇹🇭 泰语 (th) -
🇮🇳 印尼语 (id) -
🇻🇳 越南语 (vi) -
🇷🇺 俄罗斯 (ru) -
🇩🇪 德国 (de) -
🇫🇷 法国 (fr) -
🇸🇦 阿拉伯 (ar) -
✍️ 自定义语言 (custom) -
🤝 更多支持... (欢迎PR)
-
要求
- iOS 12.0+
- Xcode 12.5+
- Swift 5.4+
安装
Swift Package Manager
dependencies: [
.package(url: "https://github.com/SilenceLove/HXPHPicker.git", .upToNextMajor(from: "2.0.0"))
]
CocoaPods
将下面内容添加到 Podfile
,并执行依赖更新。
iOS 12.0+
pod 'HXPHPicker'
/// 不包含 Kingfisher,相机不包含定位功能
pod `HXPHPicker/Lite`
/// 相机不包含定位功能
pod `HXPHPicker/NoLocation`
/// 只有选择器
pod `HXPHPicker/Picker`
pod `HXPHPicker/Picker/Lite`
/// 只有编辑器
pod `HXPHPicker/Editor`
pod `HXPHPicker/Editor/Lite`
/// 只有相机
pod `HXPHPicker/Camera`
/// 不包含定位功能
pod `HXPHPicker/Camera/Lite`
iOS 10.0+
pod 'HXPHPicker-Lite'
pod 'HXPHPicker-Lite/Picker'
pod 'HXPHPicker-Lite/Editor'
pod 'HXPHPicker-Lite/Camera'
Carthage
将下面内容添加到 Cartfile
,并执行依赖更新。
github "SilenceLove/HXPHPicker"
使用方法
Wiki 中提供了更详细的使用说明。
准备工作
按需在你的 Info.plist 中添加以下键值:
Key | 模块 | 备注 |
---|---|---|
NSPhotoLibraryUsageDescription | Picker | 允许访问相册 |
NSPhotoLibraryAddUsageDescription | Picker | 允许保存图片至相册 |
PHPhotoLibraryPreventAutomaticLimitedAccessAlert | Picker | 设置为 YES iOS 14+ 以禁用自动弹出添加更多照片的弹框(Picker 已适配 Limited 功能,可由用户主动触发,提升用户体验) |
NSCameraUsageDescription | Camera | 允许使用相机 |
NSMicrophoneUsageDescription | Camera | 允许使用麦克风 |
快速上手
import HXPHPicker
class ViewController: UIViewController {
func presentPickerController() {
// 设置与微信主题一致的配置
let config = PickerConfiguration.default
// 方法一:
let pickerController = PhotoPickerController(picker: config)
pickerController.pickerDelegate = self
// 当前被选择的资源对应的 PhotoAsset 对象数组
pickerController.selectedAssetArray = selectedAssets
// 是否选中原图
pickerController.isOriginal = isOriginal
present(pickerController, animated: true, completion: nil)
// 方法二:
Photo.picker(
config
) { result, pickerController in
// 选择完成的回调
// result 选择结果
// .photoAssets 当前选择的数据
// .isOriginal 是否选中了原图
// photoPickerController 对应的照片选择控制器
} cancel: { pickerController in
// 取消的回调
// photoPickerController 对应的照片选择控制器
}
}
}
extension ViewController: PhotoPickerControllerDelegate {
/// 选择完成之后调用
/// - Parameters:
/// - pickerController: 对应的 PhotoPickerController
/// - result: 选择的结果
/// result.photoAssets 选择的资源数组
/// result.isOriginal 是否选中原图
func pickerController(_ pickerController: PhotoPickerController,
didFinishSelection result: PickerResult) {
result.getImage { (image, photoAsset, index) in
if let image = image {
print("success", image)
}else {
print("failed")
}
} completionHandler: { (images) in
print(images)
}
}
/// 点击取消时调用
/// - Parameter pickerController: 对应的 PhotoPickerController
func pickerController(didCancel pickerController: PhotoPickerController) {
}
}
如何获取
获取 UIImage
/// 如果为视频的话获取则是视频封面
/// compressionQuality: 压缩参数,不传则不压缩
photoAsset.getImage(compressionQuality: compressionQuality) { image in
print(image)
}
获取 URL
/// compression: 压缩参数,不传则不压缩
photoAsset.getURL(compression: compression) { result in
switch result {
case .success(let urlResult):
// 媒体类型
switch urlResult.mediaType {
case .photo:
// 图片
case .video:
// 视频
}
// url类型
switch urlResult.urlType {
case .local:
// 本地URL
case .network:
// 网络URL
}
// 获取的地址
print(urlResult.url)
// LivePhoto 里面包含的 图片和视频 url
print(urlResult.livePhoto)
case .failure(let error):
print(error)
}
}
更新日志
版本 | 发布时间 | Xcode | Swift | iOS |
---|---|---|---|---|
v2.0.0 | 2023-06-14 | 14.3.0 | 5.7.0 | 12.0+ |
v1.4.6 | 2022-11-20 | 14.0.0 | 5.7.0 | 12.0+ |
版权协议
HXPHPicker 基于 MIT 协议进行分发和使用,更多信息参见协议文件。
支持
- ★ Star
- 支持作者
☕️