2012-10-07 59 views
0

我編寫了一個使用MKMapView的應用程序。此應用程序使用計時器更新屏幕上的某些信息。實際上,當用戶觸摸地圖並開始拖動時,定時器不會再被觸發,直到用戶鬆開觸摸。我注意到,在新的iOS 6中,這個問題消失了。不過,我還需要支持iOS 5.我還沒有弄清楚是否只有定時器沒有被觸發,或者根本沒有處理任何事件。任何想法?iOS 5上的MKMapView在用戶拖動和/或縮放時禁止定時器

回答

0

嗯,這表明定時器和觸摸處理代碼正在被同一個runloop處理,或者可能是因爲觸摸被阻塞,所以當定時器完成代碼嘗試運行時,它不能。嘗試使用具有完成處理程序的異步塊來運行定時器。

- (void)startTimerInBackground { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 

    //Start timer here, set completion method to be called 
    NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 2.0 
                target: self 
               selector:@selector(timerCompletionMethod:) 
               userInfo: nil repeats:NO]; 
    }); 
} 

- (void)timerCompletionMethod:(NSTimer *)timer { 

    //Switch back to main thread here for completion code 
    dispatch_async(dispatch_get_main_queue(), ^(void) { 


    }); 
} 

看看是否有幫助,也不過,請注意計時器是不可靠的,如果你需要非常精確的定時你應該尋找替代,有一些非常好的信息在這裏:

How do I use NSTimer?

+0

不幸的是,它不起作用。 'timerCompletionMethod'根本不被調用。我也嘗試了您提供的鏈接中建議的其他所有方法,但問題仍然存在。看起來在所有拖動/縮放操作過程中,runloop被阻塞! – AGPX

相關問題