我有5个UISliders。所有5的总和应该是100.现在,它们都默认为20开始。因此,它们不应该在开始时超过20,因为它们的总和已经是100.现在,让我说我移动UISlider1并将其降低到10.这意味着现在所有5之间的总和是90,因此我有10个“释放”。所以UISlider2应该能够增加到30.或者UISlider2再到25,UISlider3再增加到25。
我的问题是,我该怎么做?如何动态(以编程方式)根据其他人的值更改UISlider的最大值?
谢谢!
编辑:看看答案。答案 0 :(得分: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.
}
答案 1 :(得分: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?
答案 2 :(得分:0)
(溶液)
感谢所有回复的人,我自己想出来了,我只想在这里发布解决方案,以防其他人在将来需要帮助。
(总百分比和百分比,默认情况下设置为100.PercentRemaining由百分比 - 百分比确定。开头为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;
}
}
我希望能帮助一些人!
干杯!