2016-04-14 3 views
0

私はiOSプロジェクトで作業しています。 私はViewControllerにUISliderを持っています。 Floatプロパティ(var)を現在のスライダ値にバインドしたいとします。 このプロパティの値を変更すると、スライダの位置が自動的に更新されます。 スライダを動かすと、プロパティの値が自動的に更新されます。スライダをFloatプロパティに関連付けます。

私は委任者などと手作業で作業しましたが、最も簡単な方法があるかどうかを知りたいと思います。 実際、私は多くの(非常に巨大な)UISlidersを持っており、値はプログラムの他の部分から変更することができます。

私はC#で知っているように、値を観察してUIコンポーネントでバインドすることは可能です。私は即座に同じことをしたいです

+0

のvar myProgressFloat:CGFloat私は嘘をついた{ didSet { self.progress = myProgressFloat } } –

+0

は、あなたが値を使用すると、取得/設定を使用する必要があります変数を設定し、受信あなたの両方occassionsに更新したいですプロパティ値 –

+4

'var myProgressFloat:CGFloat { get { 返り値slider.value} {slider.value = value}} –

答えて

0

これを行う方法はたくさんありますが、この作業に役立つ多くの図書館があります。

私はBondが好きです。

これは、didSet定型句を使わずにプロパティ値を観察し、コードをきれいに保つのに役立ちます。

たとえば、これはあなたが探している正確に何が行われます。モデルのプロパティを変更することもすぐにUIを更新しますので、

import Bond 

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

これは、あなたがMVCまたはMVVMパターンを維持することができます(およびその逆!) :

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

また、1つの1に値を組み合わせることができます。

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です。

関連する問題