最後,我得到了我的問題的解決方案。
我必須將定時器添加到另一個RunLoopMode
,默認情況下定時器被添加到NSDefaultRunLoopMode
。這意味着定時器只在應用程序的運行循環處於NSDefaultRunLoopMode
時才執行。
現在,當用戶觸摸屏幕(例如滾動UIScrollView
)時,運行循環模式將切換到NSEventTrackingRunLoopMode
。而現在,運行循環不再在NSDefaultRunMode
中,定時器將不會執行。這種醜陋的效果是,只要用戶觸摸屏幕,該計時器就會被阻止。而當用戶滾動時,這可能會很長時間,因爲計時器被阻塞直到滾動完全停止。而當用戶繼續滾動時,定時器再次被阻止。
幸運的是,解決此問題的方法很簡單:您可以將計時器添加到另一個NSRunLoopMode
。當將定時器添加到NSRunLoopCommonModes
時,它將在所有運行循環模式下執行(已被聲明爲「常見」模式集合中的成員,準確而言)。這意味着計時器不僅在NSDefaultRunLoopMode
中工作,而且在NSEventTrackingRunLoopMode
(當用戶觸摸屏幕時)也工作。
等你以後初始化計時器,將它添加到NSRunLoopCommonModes
:
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
I got this answer form this link
我希望這可能有助於有人... !!!