2013-08-16 26 views
0

我有5個UISliders。所有5的總和應該是100.現在,他們都默認開始爲20,因此,他們不應該在開始時超過20,因爲他們的總和已經是100.現在,讓我說我移動UISlider1並把它降低到10.這意味着現在所有5之間的總和是90,因此我有10個「釋放」。所以UISlider2應該能夠增加到30.或者UISlider2到25和UISlider3再次到25。如何動態更改UISliders,iOS的最大值?

我的問題是,我該怎麼做?我如何動態(以編程方式)根據其他值更改UISlider的最大值?

謝謝!

編輯:看看答案。

回答

0

(液)

謝謝大家誰回答,我想通了我自己,雖然,我只是要發佈的情況下,有人在這裏解決其他需要它幫助的未來。

(%的總和percentused其中設定爲100作爲默認PercentRemaining通過percentotal-percentUsed確定其中在開始爲0。)

滑塊的初始化包括在本:

slider1.minimumValue = 0.0; 
slider1.maximumValue = [appDelegate getSlider1Percent] + [appDelegate getPercentRemaining];  

然後滑塊動作: - (IBAction爲)slider1Action:(UISlider *)發件人 {

NSUInteger value = sender.value; 
self.slider1Counter.text = [NSString stringWithFormat:@"%d%%",value]; 



NSUInteger currentSlider1Percent = [appDelegate getSlider1Percent]; 
appDelegate.slider1Percent = value; 


if(appDelegate.getSlider1Percent < currentSlider1Percent) 
{ 


    nowFree = currentSlider1Percent - value; 
    appDelegate.percentUsed = [appDelegate getPercentUsed] - nowFree; 
    appDelegate.percentRemaining = [appDelegate getPercentTotal] - [appDelegate getPercentUsed]; 

    slider2.maximumValue = [appDelegate getSlider2Percent] + appDelegate.getPercentRemaining; 

    slider3.maximumValue = [appDelegate getSlider3Percent] + appDelegate.getPercentRemaining; 
    slider4.maximumValue = [appDelegate getSlider4Percent] + appDelegate.getPercentRemaining; 
    slider5.maximumValue = [appDelegate getSlider5Percent] + appDelegate.getPercentRemaining; 
} 
else 
{ 
    nowFree = value - currentSlider1Percent; 
    appDelegate.percentUsed = [appDelegate getPercentUsed] + nowFree; 
    appDelegate.percentRemaining = [appDelegate getPercentTotal] - [appDelegate getPercentUsed]; 



    slider2.maximumValue -= nowFree; 
    slider3.maximumValue -= nowFree; 
    slider4.maximumValue -= nowFree; 
    slider5.maximumValue -= nowFree; 
} 
} 

我希望能幫助一些人!

乾杯!

0

這個怎麼樣?

// Where you create slider 
[slider1 addTarget:self action:@selector(sliderValueChanged:) 
    forControlEvents:UIControlEventValueChanged]; 
[slider2 addTarget:self action:@selector(sliderValueChanged:) 
    forControlEvents:UIControlEventValueChanged]; 
// ... etc. 

// Somewhere else 
-(void)sliderValueChanged:(UISlider *)sender{ 
    float total = slider1.value + ... + slider5.value; 
    float delta = 100 - total; 
    slider1.maximumValue = slider1.maximumValue + delta; 
    slider2.maximumValue = slider2.maximumValue + delta; 
    // ... etc. 
} 
0

沒有「默認」的方式來做到這一點。你將不得不自己創建邏輯。不過,我會給你三種你需要的方法,以便有一個空間來執行這個邏輯。

[slider addTarget:self action:@selector(sliderMove:) forControlEvents:UIControlEventValueChanged]; 

這將使它調用代碼「sliderMove」。

-(void)sliderMove:(UISlider*) slider 
{ 
    // execute logic here 

} 

在那裏,你可能會希望做一個呼叫

self.slider.value = 0.x // representing percentage filled 

調整爲取其滑塊要移動滑塊值。

您應該將故事板中的所有滑塊存儲爲@property,以便引用您的值。

設置.maximumValue將使比例不爲0到100.有關.value和.maximumValue之間的區別,請參閱此處。

Why doesn't setting the value property of this UISlider update its position?