Iphone 在……中的加速度。。。。。环

Iphone 在……中的加速度。。。。。环,iphone,objective-c,accelerometer,Iphone,Objective C,Accelerometer,我有一个for…(for…)循环,当处于循环中时,UI被阻塞。 加速计是否也被阻塞 我在viewDidLoad中有以下代码 - (void)viewDidLoad{ [super viewDidLoad]; UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer]; accel.delegate = self; accel.updateInterval = 1.0f/60.0f; } 再往下

我有一个for…(for…)循环,当处于循环中时,UI被阻塞。 加速计是否也被阻塞

我在viewDidLoad中有以下代码

- (void)viewDidLoad{
    [super viewDidLoad];
    UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
    accel.delegate = self;
    accel.updateInterval = 1.0f/60.0f;
 }
再往下

- (void)accelerometer:(UIAccelerometer *)acel didAccelerate:(UIAcceleration *)acceleration {
    acc=acceleration.x;
}
然后一个iAction连接到一个启动循环的按钮

- (IBAction)doSomething {
    for (int n = 1; n<=100;n++) {
        // do someting in the loop
        NSLog(@"x: %g", acc);
     }
 }
-(iAction)剂量测量{

对于(int n=1;n似乎UIAccelerator需要主线程,因此会被for…循环阻塞。Core Motion在
CMMotionManager
对象中也有一个加速计属性,可以报告加速度,并且做得更好,因为这是Nike+使用的。有两种方法可以访问它-一种拉动方法,在直接获取数据或回拨。老实说,我只是尝试了一下,回拨无法正常工作(主要是因为它需要NSOperationQueue,我对此没有太多经验,所以我可能把它放在了错误的队列中),但如果您对提取数据没什么意见,而您的方法似乎需要这样做,那么这是可行的:

CMMotionManager *motionManager = [[CMMotionManager alloc] init];
[motionManager startAccelerometerUpdates];

for (int i = 0; i < 10000; i++)
{
    NSLog(@"Acceleration: %f", motionManager.accelerometerData.acceleration.x);
}
CMMotionManager*motionManager=[[CMMotionManager alloc]init];
[motionManager StartAccelerometer更新];
对于(int i=0;i<10000;i++)
{
NSLog(@“加速度:%f”,motionManager.accelerometerData.Acceleration.x);
}
我刚刚在一台设备上试用过,for…循环中报告的值会随着当前加速度而更新


来源:

您的更新间隔是1/60秒。我很确定iPhone或模拟器可以在比这更短的时间内完成100次for循环迭代?我猜这是ios5+中不推荐的委托是的,我知道,但这只是一个例子,假设n是无穷大,那么它可能是不推荐的,但在我运行iO的手机中确实有效S6但情况是,当用户界面被阻塞时,是否有可能获得acc?我不确定,但你能用多个线程进行检查吗?这不是对()的任何轮询循环应该被认为是一个严重的错误,你应该努力消除它。永远不要阻止主事件循环,一般来说,永远不要阻止队列或运行循环。是的,这并不是一个很好的方法,但我认为这个问题/方法是对其他实现方法的抽象。如果这样做是完美的。谢谢,我会的带着我的行李很快回来result@Lars--这对你有用吗?让我知道,如果有,请接受答案。谢谢。这解决了我在使用cocos2d xna和monogame时的问题。我的加速计数据过时,并且在代表更新时延迟了真实值。现在,通过轮询值是正确的,c请继续。这个答案应该被认为是正确的。