gpt4 book ai didi

iOS-dispatcherTimer 阻止触摸事件?

转载 作者:行者123 更新时间:2023-11-29 04:34:44 24 4
gpt4 key购买 nike

我正在使用调度程序源计时器以不同的帧速率更新 View 。 (8、12 或 24 FPS)

这里是初始化dispatcherTimer的代码和用于创建计时器的函数。
(此函数直接取自苹果文档中的“创建计时器”小节:http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html)

调用:

    self.dispatchTimer = [self createDispatchTimerWithInterval:self.project.frameDuration * NSEC_PER_SEC
leeway:0.0 * NSEC_PER_SEC
queue:dispatch_get_main_queue()
block:displayFrame];

功能:

- (dispatch_source_t)createDispatchTimerWithInterval:(uint64_t)interval leeway:(uint64_t)leeway queue:(dispatch_queue_t)queue block:(dispatch_block_t)block {
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,
0, 0, queue);
if (timer) {
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, block);
dispatch_resume(timer);
}
return timer;
}

我的 View 更新完美,但触摸事件没有被捕获。我的第一个赌注是“displayFrame” block 花费了太多的处理时间,因为如果我将frameDuration减少到0.5秒左右,触摸事件就会被捕获。

我仅在 iOS 4 和 iPad 2 上进行了测试。

任何帮助或提示将不胜感激!

艾蒂安

更新

我在苹果开发者论坛上问过类似的问题,这是我得到的答案:https://devforums.apple.com/thread/156633?tstart=0

最佳答案

每次通过运行循环后,主运行循环都会清空主队列。我认为你说的持续时间太短是对的。如果源向队列添加新 block 的速度快于它们被耗尽的速度,我当然希望运行循环永远不会恢复处理事件(因为它不断尝试耗尽队列)。

关于iOS-dispatcherTimer 阻止触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215520/

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