Objective-C - 如果声明

Tor*_*lon 0 if-statement objective-c

快速换气,我的代码:

if (slider2.value == 1) 
{
    barHeight = 100;
}
else if (slider2.value == 2) 
{
    barHeight = 200;
}
else if (slider2.value == 3) 
{
    barHeight = 300;
}
else if (slider2.value == 4) 
{
    barHeight = 400;
}
else if (slider2.value == 5) 
{
    barHeight = 500;
}
else
{
    barHeight = 600; 
}
Run Code Online (Sandbox Code Playgroud)

当我将滑块从1拖动到6时,我看到条形的高度发生了变化.但是当我从6变为1时,barHeight被卡在600并且没有返回到100.我错过了什么?

编辑(完整声明):

- (void)valueAgeChanged:(UISlider*)slider2
{
// DRAW BARS (skeme)
CGRect frame = CGRectMake(595, barX, 80, barHeight);
orangeView= [[UIView alloc] initWithFrame:frame];
orangeView.backgroundColor = [UIColor orangeColor];
[self.view addSubview:orangeView];

// Let slider 1 animate on set value
[slider2 setValue:((int)((slider2.value + 1) / 1.0) - 1.0) animated:NO];


if (slider2.value == 1) {
    barHeight = 100;
}else if (slider2.value == 2) {
    barHeight = 200;
   // barX = 300;
}else if (slider2.value == 3) {
    barHeight = 300;
}else if (slider2.value == 4) {
    barHeight = 400;
}else if (slider2.value == 5) {
    barHeight = 500;
}else if (slider2.value == 6) {
    barHeight = 600; 
}


}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s P 6

每次更改值时,您都会添加一个新的orangeView.所以他们只是相互重叠.最高的视图将保留在屏幕上,当您添加相同颜色的较短视图时,您将看不到它们.

要解决此问题,您可以在valueChanged方法(可能是viewDidLoad)之外设置orangeView属性,并将其添加为子视图.然后,只要您的滑块更新,只更新视图的框架.

例如

- (void)valueAgeChanged:(UISlider*)slider2
{

[slider2 setValue:((int)((slider2.value + 1) / 1.0) - 1.0) animated:NO];

if (slider2.value == 1) {
    barHeight = 100;
}else if (slider2.value == 2) {
    barHeight = 200;
   // barX = 300;
}else if (slider2.value == 3) {
    barHeight = 300;
}else if (slider2.value == 4) {
    barHeight = 400;
}else if (slider2.value == 5) {
    barHeight = 500;
}else if (slider2.value == 6) {
    barHeight = 600; 
}

self.orangeView.frame = CGRectMake(595, barX, 80, barHeight);

}
Run Code Online (Sandbox Code Playgroud)

您还应该在if else语句之后移动它,否则它将仅使用之前的值更新.

编辑:正如rmaddy指出if语句在这种情况下有点矫枉过正.一个开关可能更具可读性/效率,但由于你的barHeight只是滑块值乘以100,因此写起来会容易得多:

- (void)valueAgeChanged:(UISlider*)slider2
{

barHeight = floorf(slider2.value) * 100;
self.orangeView.frame = CGRectMake(595, barX, 80, barHeight);

}
Run Code Online (Sandbox Code Playgroud)