ディスパッチャ ソース タイマーを使用して、異なるフレーム レートでビューを更新しています。(8、12、または 24 FPS)
これは、dispatcherTimer を初期化するコードと、タイマーの作成に使用される関数です。
(この関数は、「タイマーの作成」サブセクションの Apple ドキュメントから直接取得されます: 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;
}
ビューは完全に更新されますが、タッチ イベントがキャッチされません。私の最初の賭けは、frameDuration を 0.5 秒程度に減らすと、タッチ イベントがキャッチされるため、ブロック「displayFrame」の処理時間がかかりすぎることです。
これは、iPad 2 を搭載した iOS 4 でのみテストしました。
どんな助けやヒントも大歓迎です!
エティエンヌ
アップデート
Apple 開発者フォーラムで同様の質問をしました。ここに回答があります: https://devforums.apple.com/thread/156633?tstart=0