2016-01-23 39 views
1

我創建了一個4:00分鐘倒數計時器,並在達到0:00時發出聲音信號。我使用了一個功能,可以在定時器運行時防止手機進入睡眠狀態。但是,這是我的應用程序的最後一個屏幕。所以一旦acoustig最終信號結束,我想應用程序緩慢關閉。我不知道在哪裏放置代碼。斯威夫特:倒計時後關閉應用程序

這是我用來防止它入睡代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 

    UIApplication.sharedApplication().idleTimerDisabled = true 
} 

所以我想我可以使用

UIApplication.sharedApplication().idleTimerDisabled = false 

扭轉它。當我將它放入stopTimer函數內時,它將在0:00立即關閉。

func stopTimer() { 
    if count == 0 { 
     timer.invalidate() 
     timerRunning = false 
     playSound() 
     timerLabel.text = "DONE" 
    } 
} 

也許有一種方法可以延遲進程,使其在15秒後關閉。我該怎麼做呢?

+1

你可以簡單地把它在一個'dispatch_after'-block:http://stackoverflow.com/questions/24034544/dispatch-after-gcd-in-swift – luk2302

+0

我還是不確定你是否希望在計時器運行後立即進入睡眠狀態或者如果你想「順利」*在定時器耗盡後等待15秒左右進入休眠狀態。你想要哪一個? – luk2302

+0

@ luk2302:在15-30秒之後,當定時器耗盡後沒有用戶活動時,可以順利進行。 – mojomo

回答

2

寫在我的意見,並在linked answer你可以使用dispatch_after

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(15 * Double(NSEC_PER_SEC))) // the 15 indicates the seconds to wait 
dispatch_after(delayTime, dispatch_get_main_queue()) { 
    UIApplication.sharedApplication().idleTimerDisabled = false 
} 
+0

完美,像魅力一樣工作!非常感謝! :) – mojomo

0

應用程序不應該自行終止。如果你這樣做,應用商店會拒絕你。只要您的計時器完成,只需將idleTimerDisabled設置爲false即可。系統將根據用戶的設置和當前活動在未來某個時間進入睡眠狀態。 (不活動睡眠定時器不作爲用戶與他們的設備進行交互,只要開始。)

+2

這正是OP所做的。他並不是真的在詢問「終止」,而是在完成後如何再次啓用idleTimer。 (至少我是這樣理解這個問題的) – luk2302

+0

澄清:計時器運行4分鐘。通常我的電話會在2分鐘後關閉。這就是爲什麼我使用代碼來防止它入睡。但是,一旦倒計時結束,它可以進入睡眠狀態。不是馬上,但幾秒鐘後。因此,將相同的代碼設置爲'假'以恢復手機的默認行爲似乎是合乎邏輯的。 @ luk2302調度解決方案看起來很有趣,但我對Swift很陌生,而且我也不太瞭解它。我在哪裏放置秒? – mojomo