Skip to content

Instantly share code, notes, and snippets.

@romanfurman6
Created July 20, 2018 15:31
Show Gist options
  • Save romanfurman6/d9634fe79392b8e35be2b32d8006fd38 to your computer and use it in GitHub Desktop.
Save romanfurman6/d9634fe79392b8e35be2b32d8006fd38 to your computer and use it in GitHub Desktop.
class RxImagePickerDelegateProxy:
DelegateProxy<UIImagePickerController, UIImagePickerControllerDelegate & UINavigationControllerDelegate>,
DelegateProxyType,
UIImagePickerControllerDelegate,
UINavigationControllerDelegate {
weak private(set) var imagePicker: UIImagePickerController?
internal init(imagePicker: UIImagePickerController) {
self.imagePicker = imagePicker
super.init(parentObject: imagePicker, delegateProxy: RxImagePickerDelegateProxy.self)
}
static func registerKnownImplementations() {
self.register(make: { RxImagePickerDelegateProxy(imagePicker: $0) })
}
static func currentDelegate(for object: UIImagePickerController) -> (UIImagePickerControllerDelegate & UINavigationControllerDelegate)? {
return object.delegate
}
static func setCurrentDelegate(_ delegate: (UIImagePickerControllerDelegate & UINavigationControllerDelegate)?, to object: UIImagePickerController) {
object.delegate = delegate
}
}
extension Reactive where Base: UIImagePickerController {
private var _delegate: DelegateProxy<UIImagePickerController, UIImagePickerControllerDelegate & UINavigationControllerDelegate> {
return RxImagePickerDelegateProxy.proxy(for: base)
}
private var _selected: Observable<[String: Any]> {
let selector = #selector(UIImagePickerControllerDelegate.imagePickerController(_:didFinishPickingMediaWithInfo:))
return _delegate.methodInvoked(selector)
.map({ (params) -> [String: Any] in
return params[1] as! [String: Any]
})
}
var cancel: Observable<Void> {
return _delegate.methodInvoked(#selector(UIImagePickerControllerDelegate.imagePickerControllerDidCancel(_:)))
.map({ _ in })
}
var selectedEditedImage: Observable<UIImage> {
return _selected
.map({ $0[UIImagePickerControllerEditedImage] as! UIImage })
}
var selectedOriginalImage: Observable<UIImage> {
return _selected
.map({ $0[UIImagePickerControllerOriginalImage] as! UIImage })
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment