【问题标题】:How to Dynamically change the Maximum Value of UISliders, iOS?如何动态更改 UISliders、iOS 的最大值?
【发布时间】:2013-08-16 03:27:32
【问题描述】:

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

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

谢谢!

编辑:看看答案。

【问题讨论】:

    标签: ios objective-c uislider


    【解决方案1】:

    这个怎么样?

    // 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.
    }
    

    【讨论】:

      【解决方案2】:

      没有“默认”方式来做到这一点。您将不得不自己创建逻辑。不过,我会为您提供所需的三种方法,以便有空间来执行该逻辑。

       [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?

      【讨论】:

        【解决方案3】:

        (解决方案)

        感谢所有回复的人,不过我自己想出了解决方案,我将在此处发布解决方案,以防其他人将来需要帮助。

        (总百分比和使用百分比默认设置为 100。PercentRemaining 由 percental-percentUsed 确定。开头为 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;
        }
        }
        

        希望对一些人有所帮助!

        干杯!

        【讨论】:

          猜你喜欢
          • 2012-02-06
          • 1970-01-01
          • 1970-01-01
          • 2012-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-06
          相关资源
          最近更新 更多