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

时间:2013-04-03 12:56:45

标签: ios objective-c cocoa-touch uilabel uislider

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

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

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

这段代码很长很好。有什么方法可以以某种方式优化它吗?谢谢!

4 个答案:

答案 0 :(得分:3)

用于循环:

- (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个案例。

答案 1 :(得分:1)

每当您需要许多if并且您知道只有一个将被执行时,请使用if-else ladder

在这种情况下,你可以使用:( 这不是最好的方式

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

答案 2 :(得分:1)

一旦尝试这样,我想这里不需要每次都使用循环,

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

答案 3 :(得分:0)

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

然后输出值的计算将是:

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