RxMediaPicker 1.1.0

RxMediaPicker 1.1.0

测试已测试
Lang语言 SwiftSwift
许可协议 MIT
发布最新版本2017年5月
SwiftSwift 版本3.0
SPM支持 SPM

Rui CostaShai Mishali 维护。



  • Rui Costa 和 Shai Mishali

RxMediaPicker

RxMediaPicker 是一个围绕 UIImagePickerController 构建的 RxSwift 封装,提供了一种简单的接口来执行像选择设备上存储的照片或视频、录制视频或拍照等常用操作。

如果您曾经使用过 UIImagePickerController,您知道它如何变得相当冗长并引入一些不必要的复杂度,因为您使用同一类来执行所有操作,从从库中选择照片或视频,录制视频等。同时,您有所有这些不同的属性和方法,当您处理照片时可以使用,其他用于处理视频,还有其他在所有情况下都适用。

如果您感兴趣,请查看生成的文章 RxMediaPicker —— 用酷孩子的方式选择照片和视频!

注意:由于 RxMediaPicker 还处于初级阶段,界面可能在未来的版本中更改。

功能

  • [x] 周围 UIKitImagePicker 构建的响应式封装。
  • [x] 提供常见操作(如从库中选择照片、录制视频等)的接口。
  • [x] 正确处理已编辑的视频(这是 UIKitImagePicker 为您做的)。
  • [x] 将典型的 UIKitImagePicker 代码模板与您的代码解耦。
  • [x] 与 UIKitImagePicker 相比,简化了复杂性。
  • [x] 容易集成并在您的应用程序中进行重用。

示例

对于更完整的示例,请查看包含的示例应用程序(最好在设备上运行)。以下是使用相机录制视频的方法

import RxMediaPicker
import RxSwift

var picker: RxMediaPicker!
let disposeBag = DisposeBag()

override func viewDidLoad() {
    super.viewDidLoad()
    picker = RxMediaPicker(delegate: self)
}

func recordVideo() {
    picker.recordVideo(maximumDuration: 10, editable: true)
        .observeOn(MainScheduler.instance)
        .subscribe(onNext: { url in
            // Do something with the video url obtained!
        }, onError: { error in
            print("Error occurred!")
        }, onCompleted: {
            print("Completed")
        }, onDisposed: {
            print("Disposed")
        })
        .addDisposableTo(disposeBag)
}

用法

支持的操作

基于它们的名称,RxMediaPicker 上可用的操作应该是自解释的。您可以录制视频,或者选择设备上存储的现有视频,同样对于照片也是如此。需要注意的是,选择视频会为您提供视频 URL,而选择照片会为您提供原始图像和一个可选的已编辑图像(如果进行了编辑)的元组。

func recordVideo(device device: UIImagePickerControllerCameraDevice = .Rear, 
                 quality: UIImagePickerControllerQualityType = .TypeMedium, 
                 maximumDuration: NSTimeInterval = 600, editable: Bool = false) -> Observable<NSURL>
func selectVideo(source: UIImagePickerControllerSourceType = .PhotoLibrary, 
                 maximumDuration: NSTimeInterval = 600, editable: Bool = false) -> Observable<NSURL>
func takePhoto(device device: UIImagePickerControllerCameraDevice = .Rear, 
               flashMode: UIImagePickerControllerCameraFlashMode = .Auto, 
               editable: Bool = false) -> Observable<(UIImage, UIImage?)>
func selectImage(source: UIImagePickerControllerSourceType = .PhotoLibrary, 
                 editable: Bool = false) -> Observable<(UIImage, UIImage?)>

RxMediaPickerDelegate

func presentPicker(picker: UIImagePickerController)
func dismissPicker(picker: UIImagePickerController) 

要使用RxMediaPicker,您需要采用RxMediaPickerDelegate协议。这是必需的,以便通知RxMediaPicker如何显示相机/照片选择器。例如,您可能希望在iPad上以弹出窗口的形式显示照片库选择器,而在iPhone上使用整个屏幕。

要求

  • iOS 8.0+
  • Xcode 7.0+

安装

贡献者

由Rui Costa(@ruipfcosta)拥有并维护。

贡献力量

欢迎提交报错和pull请求。

许可协议

RxMediaPicker遵循MIT许可协议。请参阅LICENSE文件以获取详细信息。