gpt4 book ai didi

ios - 使用加速度计仅调用 void 一次

转载 作者:行者123 更新时间:2023-11-29 03:52:58 25 4
gpt4 key购买 nike

我设置了代码,因此我的应用程序不断循环加速度计数据,以确定手机所在的位置。我希望能够获取手机的 Z 坐标并根据它们调用操作。

现在我有这个:

if (.3 > filter.z && filter.z > -.3){
NSLog(@"STRAIGHT = %f", filter.z);


}
else if (1.3 > filter.z && filter.z > .7){
NSLog(@"DOWN = %f", filter.z);
[self performSelector:@selector(loadNextFlag) withObject:nil
afterDelay:1.0];
}
else if (-.4 > filter.z && filter.z > -1.3){
NSLog(@"UP = %f", filter.z);
}

这段代码有效。它知道手机面向的方向并正确记录信息。不起作用的是performSelector。由于当我向下倾斜手机时,加速计会不断刷新其坐标信息,因此它会在几秒钟内多次调用执行选择器操作,从而导致应用程序崩溃。有谁知道有什么方法可以让我每次向下倾斜手机时只调用一次该操作,同时仍然跟踪 Z 坐标。

最佳答案

您可以使用多线程来持续跟踪更改,同时使用 GCD 的 dispatch_async 每隔一段时间更新一次主(或任何其他)线程。在以下示例中,您将在后台线程上对数据进行采样,但每 20 个样本仅调用一次 loadNextFlag:

__block int sampleCount = 0;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
if (.3 > filter.z && filter.z > -.3){
NSLog(@"STRAIGHT = %f", filter.z);


}
else if (1.3 > filter.z && filter.z > .7){
NSLog(@"DOWN = %f", filter.z);
if (sampleCount >= 20) {
sampleCount = 0;
dispatch_async(dispatch_get_main_queue(), ^{
[self loadNextFlag];
});
} else {
sampleCount++;
}
}
else if (-.4 > filter.z && filter.z > -1.3){
NSLog(@"UP = %f", filter.z);
}

});

关于ios - 使用加速度计仅调用 void 一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16867240/

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