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)
每次更改值时,您都会添加一个新的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)
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |