UISLider 以正确的方式改变 UILabel 的值

Posted

技术标签:

【中文标题】UISLider 以正确的方式改变 UILabel 的值【英文标题】:UISLider change UILabel's value the right way 【发布时间】:2013-04-03 12:56:45 【问题描述】:

所以我有这段代码可以根据UISlider 的值更改UILabel 的值:

- (void)slider03Changed:(UISlider *)slider

    int value = 10;

    if (slider.value >= 0.1)
        value = 20;
    
    if (slider.value >= 0.2)
        value = 30;
    
    if (slider.value >= 0.3)
        value = 40;
    
    if (slider.value >= 0.4)
        value = 50;
    
    if (slider.value >= 0.5)
        value = 60;
    
    if (slider.value >= 0.6)
        value = 70;
    
    if (slider.value >= 0.7)
        value = 80;
    
    if (slider.value >= 0.8)
        value = 90;
    
    if (slider.value >= 0.9)
        value = 100;
    

    lbl01.text = [NSString stringWithFormat:@"%u hours", value];

一切正常,但我担心这里的代码质量。

这段代码相当长。有没有办法以某种方式优化它?谢谢!

【问题讨论】:

【参考方案1】:

使用 for 循环:

- (void)slider03Changed:(UISlider *)slider

    int value = 10;

    for (float i = 0.9; i > 0; i-=0.1)
    
        if (slider.value >= i)
        
           value = (i*100)+10; 
           break;
        
    

    lbl01.text = [NSString stringWithFormat:@"%u hours", value];

使用的公式是:

(i*100)+10

例如:

(0.6*100)+10 = 70
(0.7*100)+10 = 80
and so on...

更新:

您可以通过首先检查此案例slider.value >= 0.9 来进一步优化它。

为什么?

因为如果它满足更高价值的情况,那么您的if 语句的其余部分将毫无用处。在我编写的代码中,只要满足slider.value 的值最多的条件,我们就设置value 变量的值并跳出循环。这将阻止您的代码评估不必要的情况。

例如:

假设您的slider.value = 0.95

这将在您的代码中发生:

(slider.value >= 0.1) ----> true ----> then ---> set value = 20
(slider.value >= 0.2) ----> true ----> then ---> set value = 30
(slider.value >= 0.3) ----> true ----> then ---> set value = 40
(slider.value >= 0.4) ----> true ----> then ---> set value = 50
(slider.value >= 0.5) ----> true ----> then ---> set value = 60
(slider.value >= 0.6) ----> true ----> then ---> set value = 70
(slider.value >= 0.7) ----> true ----> then ---> set value = 80
(slider.value >= 0.8) ----> true ----> then ---> set value = 90
(slider.value >= 0.9) ----> true ----> then ---> set value = 100

使用我的代码:

(slider.value >= 0.9) ----> true ----> then ---> set value = 100 and break out of the loop

如您所见,使用我的代码,它只评估 1 个案例。

【讨论】:

另外,如果你想消除所有那些iffor-loop,@Anoop Vaidya 的回答是一个很好的解决方案(也很有效)。【参考方案2】:

当您需要多个if 并且您知道只会执行一个时,请使用if-else ladder

在这种情况下,您可以使用 as:(这不是最好的方法)

if (slider.value >= 0.9)
    value = 100;

else if (slider.value >= 0.8)
    value = 90;

else ....

现在要自动化/制作更短的代码,您可以将其用作:

- (void)slider03Changed:(UISlider *)slider
    lbl01.text = [NSString stringWithFormat:@"%.0f hours", round(value*10-.5)*10+10]);];

【讨论】:

【参考方案3】:

像这样尝试一次,我认为这里不需要每次都使用循环,

- (void)slider03Changed:(UISlider *)slider

    float value = slider.value;

        int k=((int)(value*10)*10)+10;
        if(k==110)
            k=100;
        
   lbl01.text = [NSString stringWithFormat:@"%d hours", value];

【讨论】:

【参考方案4】:

首先,您可以考虑更改 UISlider 以使最小值和最大值与您想要的输出相匹配 - 即 min==0,max=99。如果您想在代码中执行此操作,这些将是 minimumValue 和 maximumValue 属性;如果您使用的是 Interface Builder,则这些将是 Attributes Inspector 中的 Minimum 和 Maximum 字段。

那么输出值的计算将是:

int value = slider.value;
    value = (value + 10) - value % 10;

【讨论】:

以上是关于UISLider 以正确的方式改变 UILabel 的值的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中使用 UISlider 以编程方式更改 UILabel

使用 UISlider 更新 UILabel 会为 Sender 调用抛出“未解析的标识符”错误

如何让 UILabel 显示 UISlider 值?

Swift 在 UITableViewCell 中以正确的方式使用 UISlider?

IOS - 当滑块值改变时设置 UILabel Swift

UISlider 损坏