我正在使用调度程序源计时器以不同的帧速率更新视图。(8、12 或 24 帧/秒)
这是初始化 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;
}
我的视图完美更新,但未捕获触摸事件。我的第一个赌注是“displayFrame”块需要太多处理时间,因为如果我将 frameDuration 减少到 0.5 秒左右,触摸事件就会被捕获。
我只用 iPad 2 在 iOS 4 上测试过这个。
任何帮助或提示将不胜感激!
艾蒂安
更新
我在苹果开发者论坛上问过类似的问题,这是我得到的答案:https ://devforums.apple.com/thread/156633?tstart=0