概述
Paparazzo 是一个用于选择和编辑照片的组件。
关键功能 | |
---|---|
使用相机拍照 | |
从用户的相册中选择照片 | |
照片裁剪和旋转 | |
将滤镜应用于照片 |
内容
安装
使用 CocoaPods 安装 Paparazzo 有两种选择。
使用 Marshroute
pod "Paparazzo"
或者如果您不使用 Marshroute,并且愿意不将其他依赖项添加为依赖
pod "Paparazzo/Core"
使用方法
您可以使用整个模块或仅使用照片库。
演示整个模块
使用 Paparazzo.AssemblyFactory
(或者如果您使用 Marshroute,则使用 Paparazzo.MarshrouteAssemblyFactory
) 来初始化模块组装。
let factory = Paparazzo.AssemblyFactory()
let assembly = factory.mediaPickerAssembly()
使用组装的 module
方法创建视图控制器
let data = MediaPickerData(
items: items,
autocorrectionFilters: filters,
selectedItem: items.last,
maxItemsCount: maxItemsCount,
cropEnabled: true,
autocorrectEnabled: true,
cropCanvasSize: cropCanvasSize
)
let viewController = assembly.module(
data: data,
routerSeed: routerSeed, // omit this parameter if you're using Paparazzo.AssemblyFactory
configure: configure
)
方法参数
- items — 当模块呈现时应该初始选择的图片数组。
- filters — 可以应用于图片的筛选器数组。
- selectedItem — 选择的图片。如果设置为
nil
或如果 items 不包含具有匹配 identifier 的图片,则将选择数组中的第一张图片。 - maxItemsCount — 用户允许选择的图片的最大数量。
- cropEnabled — 表示用户是否可以执行图片裁剪的布尔标志。
- autocorrectEnabled — 表示用户是否可以将滤镜应用于图片的布尔标志。
- cropCanvasSize — 裁剪图片时画布的最大尺寸。(参见 内存限制)
- routerSeed — Marshroute 提供的 routerSeed。
- configure — 允许您提供 模块的附加参数 的闭包。
MediaPicker 模块的附加参数
附加参数在 MediaPickerModule
协议中描述。
setContinueButtonTitle(_:)
、setContinueButtonEnabled(_:)
、setContinueButtonVisible(_:)
和setContinueButtonStyle(_:)
允许自定义“继续”按钮文本和可用性。setAccessDeniedTitle(_:)
、setAccessDeniedMessage(_:)
和setAccessDeniedButtonTitle(_:)
允许自定义“访问被拒绝”视图的文本。set_crop_mode(_:)
允许自定义图片裁剪行为。onItemsAdd
在用户从照片库选择图片或使用相机拍摄新图片时被调用。onItemUpdate
在用户完成裁剪后被调用。onItemAutocorrect
在应用滤镜后被调用。onItemMove
在移动图片后被调用。onItemRemove
在用户删除图片时被调用。onFinish
和onCancel
分别在用户点击“继续”和“关闭”时被调用。
裁剪图片时的内存限制
当在低内存容量的设备上裁剪照片时,由于内存警告,您的应用可能会崩溃。这是因为在实际裁剪之前,我们需要将原始照片的位图放入内存中。为了降低旧设备(如iPhone 4或4s)崩溃的风险,我们可以在事先缩放源照片,使其在内存中占用更少空间。这里用到的是 cropCanvasSize,它指定了缩放时应该针对的照片大小。
展示相册
使用 Paparazzo.AssemblyFactory
(如果您使用 Marshroute 则使用 Paparazzo.MarshrouteAssemblyFactory
)初始化模块组件
let factory = Paparazzo.AssemblyFactory()
let assembly = factory.photoLibraryAssembly()
使用组装的 module
方法创建视图控制器
let viewController = assembly.module(
selectedItems: selectedItems,
maxSelectedItemsCount: maxSelectedItemsCount,
routerSeed: routerSeed, // omit this parameter if you're using Paparazzo.AssemblyFactory
configure: configure
)
- selectedItems — 预选照片(或
nil
)。 - maxItemsCount — 用户允许选择的图片的最大数量。
- routerSeed — Marshroute 提供的 routerSeed。
- configure — 闭包,用于提供额外的模块设置。
展示蒙版裁剪器
MaskCropper 是一个模块,提供了简单的自定义裁剪体验。请参考 CroppingOverlayProvider 协议以获得更多详细信息。
使用 Paparazzo.AssemblyFactory
(如果您使用 Marshroute 则使用 Paparazzo.MarshrouteAssemblyFactory
)初始化模块组件
let factory = Paparazzo.AssemblyFactory()
let assembly = factory.maskCropperAssembly()
使用组装的 module
方法创建视图控制器
let data = MaskCropperData(
imageSource: photo.image,
cropCanvasSize: cropCanvasSize
)
let viewController = assembly.module(
data: data,
croppingOverlayProvider: croppingOverlayProvider,
routerSeed: routerSeed, // omit this parameter if you're using Paparazzo.AssemblyFactory
configure: configure
)
- imageSource — 需要裁剪的照片。
- croppingOverlayProvider — 来自 CroppingOverlayProvidersFactory 的提供者。
- routerSeed — Marshroute 提供的 routerSeed。
- configure — 闭包,用于提供额外的模块设置。
展示扫描器
Scanner 是一个模块,提供处理实时摄像头流的方式。请参考 ScannerOutputHandler 协议以获得更多详细信息。
使用 Paparazzo.AssemblyFactory
(如果您使用 Marshroute 则使用 Paparazzo.MarshrouteAssemblyFactory
)初始化模块组件
let factory = Paparazzo.AssemblyFactory()
let assembly = factory.scannerAssembly()
使用组装的 module
方法创建视图控制器
let data = ScannerData(
initialActiveCameraType: .back,
cameraCaptureOutputHandlers: []
)
let viewController = assembly.module(
data: data,
routerSeed: routerSeed, // omit this parameter if you're using Paparazzo.AssemblyFactory
configure: configure
)
- initialActiveCameraType — 启动模块时首选的摄像头(前或后 FaceTime Camera)。
- cameraCaptureOutputHandlers — 确认 ScannerOutputHandler 协议的处理程序数组。
- routerSeed — Marshroute 提供的 routerSeed。
- configure — 闭包,用于提供额外的模块设置。
UI 自定义
您可以为照片选择器中的颜色、字体和图标进行自定义。只需将一个 PaparazzoUITheme
实例传递给组件工厂的初始化器。
var theme = PaparazzoUITheme()
theme.shutterButtonColor = .blue
theme.accessDeniedTitleFont = .boldSystemFont(ofSize: 17)
theme.accessDeniedMessageFont = .systemFont(ofSize: 17)
theme.accessDeniedButtonFont = .systemFont(ofSize: 17)
theme.cameraContinueButtonTitleFont = .systemFont(ofSize: 17)
theme.cancelRotationTitleFont = .boldSystemFont(ofSize: 14)
let assemblyFactory = Paparazzo.AssemblyFactory(theme: theme)
ImageSource
用户通过 Paparazzo 拍摄的照片作为 MediaPickerItem
(使用 MediaPicker 模块时)或 PhotoLibraryItem
(使用 PhotoLibrary 模块时)提供。这两个实体都是围绕协议 ImageSource
的包装,该协议允许您获取不同的图像表示,无论其来源如何。要了解如何使用它,请访问https://github.com/avito-tech/ImageSource
本地化
您可以在以下位置查看支持的语言列表 这里。如果没看到您想用的语言,我们鼓励您通过创建添加 Localizable.strings
文件的手动请求来为项目做出贡献。
如果您对 Paparazzo 提供的字符串不满意,您可以在项目中覆盖它们。只需将 Paparazzo.strings
添加到主包中。仅覆盖您需要的字符串(您可以在 PaparazzoExample 项目中看到这个示例)。
许可
MIT