iPhone加速计:didAccelerate:在我运行循环时似乎没有被呼叫

iPhone加速计:didAccelerate:在我运行循环时似乎没有被呼叫,iphone,uiaccelerometer,iphone-sdk-3.1.2,Iphone,Uiaccelerometer,Iphone Sdk 3.1.2,与加速度计相关的问题。(很抱歉,格式可能不正确,这是我第一次使用此网站)。我使用标准代码使加速计按预期工作 UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer]; accel.delegate = self; accel.updateInterval = 0.1; //I also tried other update values 每次调用类中的Accelerator:didAccelerate:方法时,我都使用NS

与加速度计相关的问题。(很抱歉,格式可能不正确,这是我第一次使用此网站)。我使用标准代码使加速计按预期工作

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = 0.1;   //I also tried other update values
每次调用类中的Accelerator:didAccelerate:方法时,我都使用NSLog来记录。函数按预期调用,在这里之前一切正常

但是,当我运行循环时,上面的方法似乎没有被调用。像这样的

float firstAccelValue = globalAccel; //this is the x-accel value (stored in a global by the above method)
float nextAccelValue = firstAccelValue;

while (nextAccelValue == firstAccelValue){

    //do something
    nextAccelValue = globalAccel; // note globalAccel is updated by the accelerometer method

}
上面的循环永远不会出现,因为没有调用Accelerator:didAccelerate:方法,因此globalAccel永远不会更改值

如果我使用一个固定的条件来中断while循环,我可以看到在循环结束后,方法调用再次正常工作

我是不是漏掉了什么明显的东西?或者,在进行某些处理时,加速计方法是否不触发

任何帮助都将不胜感激!谢谢

(不要将
浮点值
=
进行比较)

CPU被循环占用,没有时间给您更新的加速器值

既然每次加速度变化时都会调用
-Accelerator:didAccelerate:
,为什么不在
的情况下使用

// in -accelerometer:didAccelerate:
if (fabs(nextAccelValue - firstAccelValue) < 0.0001) {
   // do something
   nextAccelValue = globalAccel;
}
//in-加速计:didAccelerate:
if(晶圆厂(NextacelValue-firstAccelValue)<0.0001){
//做点什么
nextacelvalue=globalAccel;
}
非常感谢!(关于浮动比较,是的,我理解,这只是一个例子)

实际上,我想做的是:按下按钮后,我想获得加速计值(firstValue),然后等待它发生变化(即相对于firstValue的特定值),然后继续执行一些任务。因此,我使用的是while循环。(我显示的循环只是等待它发生变化,但我可以在它工作后设置所需的确切变化条件)

从您的回答中,我了解到我可以在-Accelerator:didAccelerate:函数本身中执行任务(因为它可以访问它所需的所有数据,所以我可以让它访问一个指示按钮是否按下的变量)。非常感谢。我想我可以这样做

但好奇的是,有没有别的办法?如果太多的处理占用了CPU,我能强迫它以某种方式更新加速计吗?占用CPU本身的循环是低优先级的,因为这只是我等待值更改的方式


再次感谢

肯尼特:我刚才看了你关于加速度计的答案。我的加速度计有问题。你能看一下吗。。一个多月来,我一直在努力解决这个问题。谢谢