我有一个触发和读取iPhone麦克风输入电平的定时器设置。我有一些if语句,如果传入的卷是“this”,那么将视图背景颜色更改为“this”。
一切正常,但自然地仪表连续0,1,2,3,4,5然后以5,4,3,2,1,0的相反顺序返回。但是我不希望这种情况发生。当音量试图回落时,我想一直跳回到“0”。
所以我做的是创建两个变量。一个称为“previousValue”,另一个称为“currentValue”,用于跟踪它们在我所处的级别中的位置 - 然后是最后一个if语句,表明previousValue> currentValue(下降)然后跳回“0”。但是,它只是不起作用。也许我在这里做错了什么?
非常感谢一点帮助!谢谢!这是代码,以便您可以更好地了解我想要实现的目标。
我在实现下面声明了INT值 int previousValue; int currentValue;
然后在viewDidLoad中设置一个起点 previousValue = 0; currentValue = 0;
if (meterResults > 0.0) {
NSLog(@"0");
self.view.backgroundColor = [UIColor redColor];
previousValue = currentValue;
currentValue = 0;
}
if (meterResults > 0.1){
NSLog(@"1");
self.view.backgroundColor = [UIColor yellowColor];
previousValue = currentValue;
currentValue = 1;
}
if (meterResults > 0.2){
NSLog(@"2");
self.view.backgroundColor = [UIColor blueColor];
previousValue = currentValue;
currentValue = 2;
}
if (meterResults > 0.3){
NSLog(@"3");
self.view.backgroundColor = [UIColor greenColor];
previousValue = currentValue;
currentValue = 3;
}
if (meterResults > 0.4){
NSLog(@"4");
self.view.backgroundColor = [UIColor purpleColor];
previousValue = currentValue;
currentValue = 4;
}
if (previousValue > currentValue) {
NSLog(@"Hello, don't go in reverse order go straight to Red");
self.view.backgroundColor = [UIColor redColor];
}
答案 0 :(得分:1)
问题在于你的if
语句内部正在执行:
previousValue = currentValue;
当然,你最后的比较永远不会评估为true
,因为它们在那一点上总是相等的。
我建议做类似的事情:
if (previousValue > currentValue) {
currentValue = 0;
}
...代码的开头。
答案 1 :(得分:1)
Aroth的回答是对的,但是在你接受建议后你仍然会遇到问题。由于您正在对模拟信号进行采样,因此连续测量将大致连续。如果将当前值更改为零,则下一个读取的值将显示给您的代码再次增加,而不是。
不要因为当前的值而撒谎,以使UI按照您的意愿行事。相反,明确地模拟你关心的事物,这是瞬时的一阶导数。那会是这样的:
currentValue = (int)floor(meterResults * 10.0);
NSInteger currentFirstDerivative = currentValue - previousValue;
// since the timer repeats at a fixed interval, this difference is like a 1st derivative
if (currentFirstDerivative < 0) {
// it's going down, make the view red
} else {
switch (currentValue) {
case 1:
// change colors here
break;
case 2:
// and so on
}
// now, for next time
previousValue = currentValue;