FMPhotoPicker 是一个现代、简单且无依赖的图片选择器,同时拥有优雅且可定制的图片编辑器。
快速演示
批量选择/取消选择 |
平滑过渡 |
滤镜 |
裁剪 |
---|---|---|---|
功能
- 支持单选和复选
- 支持拖拽批量选择/取消选择
- 支持预览
- 支持具有滤镜和裁剪功能的简单图片编辑器
- 支持强制裁剪模式
- 支持圆形图片预览
- 支持自定义裁剪
- 支持自定义滤镜
- 支持视频播放器
- 支持自定义确认视图
- 支持语言本地化
要求
- iOS 9.0+
安装
SwiftPM
dependencies: [
.package(url: "https://github.com/congnd/FMPhotoPicker.git", .exact("1.3.0")),
]
Carthage
请在您的Carthfile中插入以下行
git "[email protected]:congnd/FMPhotoPicker.git"
然后运行 carthage update FMPhotoPicker
CocoaPods
FMPhotoPicker 现在在 CocoaPods 中可用
您可以将以下类似内容添加到您的 Podfile 中:pod 'FMPhotoPicker', '~> 1.3.0'
target 'MyApp' do
pod 'FMPhotoPicker', '~> 1.3.0'
end
然后在您的终端中运行 pod install
使用方法
创建配置对象
var config = FMPhotoPickerConfig()
详细信息见 配置
选择器
let picker = FMPhotoPickerViewController(config: config)
picker.delegate = self
self.present(picker, animated: true)
从 iOS 10 开始,您必须将 Privacy - Photo Library Usage Description
添加到您的 Info.plist 文件中。
编辑器
let editor = FMImageEditorViewController(config: config, sourceImage: image)
editor.delegate = self
self.present(editor, animated: true)
委托方法
- 实现FMPhotoPickerViewControllerDelegate协议以处理选中照片。
func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith photos: [UIImage])
func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith assets: [PHAsset])
如果您希望以PHAsset
类型而不是UIImage
类型接收选中照片,那么请不要忘记将shouldReturnAsset
设置为true
并实现相应的委托方法。
- 实现FMImageEditorViewControllerDelegate协议以处理输出图像
func fmImageEditorViewController(_ editor: FMImageEditorViewController, didFinishEdittingPhotoWith photo: UIImage)
配置
该配置支持以下参数
mediaTypes
selectMode
maxImage
maxVideo
availableFilters
availableCrops
useCropFirst
alertController
shouldReturnAsset
forceCropEnabled
eclipsePreviewEnabled
strings
参考
-
mediaTypes
一个数组,指示选择器控制器可以访问的媒体类型。
类型:[FMMediaType]
默认:[.image, .video]
-
selectMode
照片选择模式,可以是single
或multiple
模式。
类型:FMSelectMode
默认为multiple
-
默认为
10
编辑器中使用的过滤选项。将此参数设置为nil
,将使过滤菜单在编辑器中不可用。FMPhotoEditor提供了一些默认的过滤效果,这些效果将适合您。
类型:[FMFilterable]?
默认值:所有过滤效果均由FMPhotoPicker提供。 -
availableCrops
编辑器中使用的裁剪选项。将此参数设置为nil
,将使裁剪菜单在编辑器中不可用。FMPhotoEditor提供了一些默认的裁剪效果,这些效果将适合您。
类型:[FMCroppable]?
默认值:所有裁剪效果均由FMPhotoPicker提供。
不允许在不提供至少一个裁剪选项或一个过滤选项的情况下使用编辑器。
-
useCropFirst
该选项指示是否在FMImageEditorViewController
中将裁剪菜单设置为默认选中。
类型:Bool
默认值:false
-
alertController
用于向用户显示带有两种选项(确定或取消)的确认视图的警告控制器。
类型:FMAlertable
默认值:FMAlert
-
shouldReturnAsset
您想要FMPhotoPicker返回PHAsset而不是UIImage。 FMPhotoPicker根据此配置选择适当的代理方法来调用用户完成选择时的回调 类型:Bool
默认值:false
-
forceCropEnabled
一个布尔值,表示是否启用强制模式。
如果设置为true
,则编辑器中将仅使用availableCrops
中的第一个裁剪效果。
该裁剪的比率成为强制裁剪比率。
类型:FMAlertable
默认值:false
-
eclipsePreviewEnabled
一个布尔值,表示是否应该以圆形图像显示图像预览。
类型:Bool
默认值:false
-
strings
一个字典,允许您自定义应用程序的语言。
有关详细信息,请参阅FMPhotoPickerConfig.swift
类型:Dictionary
自定义
自定义过滤
您可以通过实现FMFilterable
协议来自由创建自己的过滤效果。
public protocol FMFilterable {
func filter(image: UIImage) -> UIImage
func filterName() -> String
}
请注意,filterName用于确定两个过滤效果是否相同。
请确保您过滤效果的名称没有重复,特别是对于您想要使用的默认过滤效果。
自定义裁剪
与滤镜函数类似,FMPhotoPicker通过实现FMCroppable
协议提供了使用你自己的裁剪功能。
public protocol FMCroppable {
func crop(image: UIImage, toRect rect: CGRect) -> UIImage
func name(string: [String: String]) -> String
func icon() -> UIImage
func ratio() -> FMCropRatio?
}
func name(strings: [String: String]) -> String
将从配置对象中接收字符串配置。这允许你在同一个位置自定义裁剪,同时保持所有的语言设置。
name()
方法也用作裁剪的标识符。
因此,请确保没有重复的裁剪名称。
自定义提示视图控制器
通过实现FMAlertable
协议,你可以用自己的视图样式设计确认视图。
public protocol FMAlertable {
func show(in viewController: UIViewController, ok: @escaping () -> Void, cancel: @escaping () -> Void)
}
开发者
许可
FMPhotoPicker遵循MIT许可发布。详情请参见LICENSE文件。