[iPhone]UISliderにてvalue値固定でmaximumValueを変更した際にはUISliderの見た目が変化しないみたい。そんなときの無理やりな対処の仕方。
UISliderの挙動に悩みました。
やりたかったこと。
たとえば、UISliderが二つあって(sliderA,sliderBとする)、
初期値はこんな感じで、
sliderA.maximumValue = 200; sliderA.minimumValue = 100; sliderA.value = 150; sliderB.maximumValue = 100; sliderA.minimumValue = 0; sliderA.value = 50;
sliderAのvalue値をsliderBのmaximumValueに対応させたい
//sliderAに対するValue changedなメソッド -(IBAction) changeSliderAValue:(UISlider* )slider { sliderB.maximumValue= sliderA.value; }
sliderBはmaximumValueは変化するがvalueは変化しない。
この状態でsliderBの見た目(つまみの位置)が相対的に変化して欲しい。
が、変化しない。。
sliderBのvalueを変数で保持しておいて、明示的にsilderB.valueに代入してみてもだめ。
float sliderBValue; //sliderAに対するValue changedなメソッド -(IBAction) changeSliderAValue:(UISlider* )slider { sliderB.maximumValue= sliderA.value; sliderB.value = _sliderBValue; } //sliderBに対するValue changedなメソッド -(IBAction) changeSliderBValue:(UISlider* )slider { _sliderBValue = sliderB.value; }
どうも挙動を確認してみるとslider.valueには現在地と同じ値を明示的に代入しても見た目の変化は起きないようだった。
現在地と違う値を入れてあげれば、maximumValueに対応した見た目の変化も発生する。
で、考えた苦肉の策はこちら
float sliderBValue; //sliderAに対するValue changedなメソッド -(IBAction) changeSliderAValue:(UISlider* )slider { sliderB.maximumValue= sliderA.value; //わざとランダムな数値を一度代入することで現在値を更新する sliderB.value = arc4random() % 100; //改めて_sliderBValueを代入することで正しい見た目にする sliderB.value = _sliderBValue; } //sliderBに対するValue changedなメソッド -(IBAction) changeSliderBValue:(UISlider* )slider { _sliderBValue = sliderB.value; }
もっといい方法がありましたら、教えてくださいませ。。
Tweet