我正在使用調度程序源計時器以不同的幀速率更新視圖。 (8,12或24 FPS)iOS - dispatcherTimer阻止觸動事件?
以下是初始化dispatcherTimer和用於創建計時器的函數的代碼。
(此功能直接從小節 「創建一個計時器」 蘋果DOC採取: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!
艾蒂安
UPDATE
我曾問過類似的問題對蘋果developper論壇,這裏是我得到了答案:https://devforums.apple.com/thread/156633?tstart=0
使用「Time Profiler」在儀器中運行代碼並檢查「所有線程狀態」選項。當結果回來時,請看「線程策略」。儀器告訴你主線程在做什麼?它忙於計算還是等待什麼? –