0

我有 5 个 UISlider。所有 5 的总和应该是 100。现在,它们都默认为 20。因此,它们一开始不应该超过 20,因为它们的总和已经是 100。现在,假设我移动UISlider1 并将其降低为 10。这意味着现在所有 5 之间的总和为 90,因此我有 10 个“释放”。所以 UISlider2 应该可以增加到 30。或者 UISlider2 到 25 和 UISlider3 到 25。

我的问题是,我该怎么做?如何根据其他值动态(以编程方式)更改 UISlider 的最大值?

谢谢!

编辑:看看答案。

4

3 回答 3

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.
}
于 2013-08-16T03:41:25.670 回答
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 之间的区别。

为什么设置此 UISlider 的 value 属性不更新其位置?

于 2013-08-16T03:43:19.240 回答
0

(解决方案)

感谢所有回复的人,虽然我自己想出了解决方案,但我将在这里发布解决方案,以防其他人将来需要帮助。

(总百分比和使用百分比默认设置为 100。剩余百分比由百分比使用百分比确定。开始时为 0。)

滑块的初始化包括:

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

然后滑块动作: - (IBAction)slider1Action:(UISlider *)sender {

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;
}
}

我希望这可以帮助一些人!

干杯!

于 2013-08-17T23:50:44.117 回答