gpt4 book ai didi

iphone - for..... 循环中的加速

转载 作者:行者123 更新时间:2023-12-03 21:02:06 25 4
gpt4 key购买 nike

我有一个 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;
}

然后将 IBAction 连接到启动循环的按钮

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

记录加速度计 x 值时,按下按钮时仅显示第一个值,并且在循环运行时不会更新。相同的第一个值不断重复。有没有办法记录循环中的加速度?

最佳答案

看来 UIAccelerometer 需要主线程,因此被 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);
}

我刚刚在设备上尝试过,for...循环中报告的值会使用当前加速度进行更新。

来源:UIBackgroundModes and UIAccelerometer

关于iphone - for..... 循环中的加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com