Implemented a photo filter app using RxSwift.
//ViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let navC = segue.destination as? UINavigationController,
let photoCVC = navC.viewControllers.first as? PhotosCollectionViewController else {
fatalError()
}
photoCVC.selectedPhoto.subscribe(onNext: { [weak self] photo in
DispatchQueue.main.async {
self?.updateUI(with: photo)
}
}).disposed(by: disposeBag)
}
@IBAction func applyFilterButtonPressed() {
guard let sourceImage = self.photoImageView.image else { return }
FilterService().applyFilter(to: sourceImage)
.subscribe(onNext: { filteredImage in
DispatchQueue.main.async {
self.photoImageView.image = filteredImage
}
}).disposed(by: disposeBag)
}
//FilterService
func applyFilter(to inputImage: UIImage) -> Observable<UIImage> {
return Observable<UIImage>.create { observer in
self.applyFilter(to: inputImage) { (filteredImage) in
observer.onNext(filteredImage)
}
return Disposables.create()
}
}
- Download the source code by cloning this repository.
- RxSwfit is already installed.
- Open the xcworkspace file with the latest version of Xcode.