2011-11-17 19 views
6

我的iPhone應用程序有兩個狀態:UI和遊戲。 遊戲中使用設備只傾斜發揮,所以我切換自動休眠關閉的遊戲開始:iOS idleTimerDisabled行爲

[[UIApplication sharedApplication].idleTimerDisabled = TRUE; 

但只要我回到UI,我想自動休眠再次激活。所以,在遊戲結束我恢復它:

[[UIApplication sharedApplication].idleTimerDisabled = FALSE; 

長時間玩遊戲後,結果是第一UI畫面,我賽後去立即變黑。 所以看起來,當空閒計時器被禁用時,它仍然是計算時間。它在「啓用」後立即啓動。我該如何解決這個問題?

回答

2

我不知道,如果idleTimer可以通過編程復位,但是一個選項是要求用戶之前,觸摸屏回去。

另一個選項是設置您自己的超時,一旦你回來並等待它完成,然後再設置idleTimerDisabled = NO。如果您再次開始遊戲,請記住清除此超時時間。

+1

第二個選項正是我已經使用的。我想知道是否有更少的「黑客」方式來修正這個問題。 – Nick

+1

猜測系統空閒超時值並不是很好,但除此之外它是一個相當不錯的「黑客」。你可以嘗試一個編程式觸摸事件,但即使它起作用,它也不會少「哈克」。 – Gil

+0

@Gil也許我不明白這個權利。如何任意拖延設置idleTimerDisabled = NO調用幫助與OP正在看到的「競爭條件」?例如,如果iOS定時器設置爲30秒並且當前處於第25秒,那麼應用程序在返回時強制延遲5秒。由於您不知道iOS內部空閒計時器的狀態,因此只會導致相同的問題? – stonedauwg

1

這個answer可能是有用的。

我在使用音樂/音頻播放器時似乎也遇到了問題,它似乎重新激活了定時器。

PS:在的ObjectiveC你應該使用YES/NO,而不是FALSE/TRUE

+1

我沒有看到我的問題和你提到的答案之間的直接關係。據我所知,他們在激活disable_timer時遇到了問題。他們的解決方案是將其設置爲NO,然後立即設置爲YES。我的情況是,定時器正常激活和停用,但它「記住」其停用時間的長度,並在激活時立即觸發。沒有辦法以編程方式「觸摸」設備,從而重置計時器? – Nick

+0

我認爲這個技巧解決了我設置爲UISwitch值(例如0/1)的空閒計時器的問題 – GeoffCoope