我有自己的图像类(UICustomImage)。
如何跟踪图片更改并更新GLKView?
ViewModel:
final class ViewModel {
private let disposeBag = DisposeBag()
let image: UICustomImage
let sliderValue: Variable<Float>
init(image: UIImage) {
self.sliderValue = Variable(Float(0.0))
self.image = UICustomImage(image: image)
self.sliderValue.asObservable()
.subscribe(onNext: { (value) in
self.image.brightness(n: value)
})
.disposed(by: disposeBag)
}
}
ViewController:
@IBOutlet var slider: UISlider!
private let disposeBag = DisposeBag()
private var viewModel: ViewModel!
var image: UIImage?
override viewDidLoad() {
viewModel = ViewModel(image: image!)
slider.rx.value
.subscribe(onNext: { value in
self.viewModel.sliderValue.value = value
})
.disposed(by: disposeBag)
}
我想在滑块移动时更新图片。
答案 0 :(得分:2)
您需要将明亮的图像导出为Observable。如果您将brightness(n:)
函数作为UIImage的扩展而不是创建自定义类,这会更简单...
一些注意事项:
UICustomImage
可以通过致电UIImage
返回更新的asImage
。brightness(n:)
没有返回值。请注意我在image
上如何sliderValue
作为因变量。
final class ViewModel {
let image: Observable<UIImage>
let sliderValue: Variable<Float>
init(image: UIImage) {
sliderValue = Variable(Float(0.0))
self.image = sliderValue.asObservable()
.map { let image = UICustomImage(image: image)
image.brightness(n: $0)
return image.asImage
}
}
}
关于视图控制器的注意事项:
super.viewDidLoad()
。你必须始终这样做。image
隐式解开了。不管怎么说,因为在任何情况下代码都会崩溃而没有图像。将viewModel的图像属性设置为可观察对象后,您只需将其绑定到图像视图即可。
final class ViewController: UIViewController {
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var imageView: UIImageView!
private let disposeBag = DisposeBag()
private var viewModel: ViewModel!
var image: UIImage!
override func viewDidLoad() {
super.viewDidLoad()
viewModel = ViewModel(image: image)
slider.rx.value
.bind(to: viewModel.sliderValue)
.disposed(by: disposeBag)
viewModel.image
.bind(to: imageView.rx.image)
.disposed(by: disposeBag)
}
}