将滑块关联到Float属性

时间:2016-04-14 14:48:33

标签: ios swift uislider

我正在开发一个iOS项目。 我的ViewController上有一个UISlider。 我想将Float属性(var)绑定到当前滑块值。 如果我更改此属性值,我想自动更新我的滑块位置。 如果我移动滑块,我想自动更新属性值。

我已经使用delegates et stuff手动工作,但我想知道是否有最简单的方法。 事实上,我有很多(非常巨大的)UISliders,价值观可以从程序的其他部分改变。

我知道在C#中可以观察一个值并将其与UI组件绑定。我想在swift中做同样的事情

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点以及许多帮助您完成此任务的库。

我喜欢Bond

它允许您在没有didSet样板的情况下观察属性值,并帮助您保持代码清洁。

例如,这完全符合您的要求:

import Bond

let ageSlider = UISlider()
let age = Observable<Float>(0)
ageSlider.bnd_value.bidirectionalBindTo(age)

这可以帮助您保留MVC或MVVM模式,因为更改模型属性也会立即更新UI(反之亦然!):

age.Value = 18
print(ageSlider.value) // Prints 18

您还可以将值组合成一个值:

let slider1 = UISlider()
let slider2 = UISlider()
let averageValue = combineLatest(slider1.bnd_value, slider2.bnd_value).map{ (v1, v2) in (v1 + v2) / 2 }
averageValue.observe { newValue in
    print("New average value is \(newValue)")
}

the project page中的更多信息。