我目前正在使用swift和xcode爲iPhone編程測驗應用程序。自從一個星期以來,我一直存在一個問題,我無法如此解決到今天。Swift:Gui沒有更新/太晚
小背景資料:
所有問題都在服務器上在線保存時間剛剛好被下載。這些問題總是包含圖像,因此需要一些時間來加載它們。這就是爲什麼我在用戶仍在思考當前問題時在後臺加載下一個問題的原因。因此,我使用類問題加載器,它延伸線程。
問題情境:
當用戶回答問題,並按下繼續 - 按鈕,功能goToNextQuestion()被觸發,顯示給用戶的下一個問題。下一個問題的預加載完成,它可以立即顯示或下一個問題仍在加載,我們必須等待。
問題:
現在,如果我們要等待,我想顯示加載標籤和-Indicator。兩者都在gui中(與界面構建者一起放置)並隱藏在當時。我不喜歡這樣寫道:
func goToNextQuestion()
{
//check if next question is already ready
if (nextQuestionLoader.isFinished==false)
{
//not ready, so wait and show waiting indication
labelLoading.isHidden = false
loadingIndicator.startAnimating()
while(nextQuestionLoader.isFinished == false) {}
//question i now ready, hide waiting indication
labelLoading.isHidden = true
loadingIndicator.stopAnimating()
}
//so next question is ready and all good
}
我希望發生的是,當用戶按下繼續和接下來的問題是還沒有準備好,那loadingIndicator和labelLoading顯示,直到問題已準備就緒。
現在發生的是,繼續被按下沒有任何顯示,gui被阻止util使用問題已經準備好,那麼它顯示下一個問題,同樣的事情發生在下面的問題。
Screenshots of the area of my gui that is concerned for better visualitzation (對不起,不同數量的截圖獲得的積分的,沒有這個問題做的,只需2個不同的截屏)
所以GUI更新的問題之前,不會發生被加載完全並且不會立即發生!
其他信息
- 我試着在代碼的其他點的負載指標顯示,他們表現出正確的,所以不存在問題與此有關。
- 當我把打印-命令之前和之後的while循環,並跟隨輸出在終端,我看到print-commands在while循環之前和之後正確執行。但gui更新只發生在
- 函數goToNextQuestion完全在主線程中執行!
那麼,怎樣才能實現我的負荷,指示直接顯示和顯示後,while循環等待另一個線程的結束?
我真的很絕望,因爲我根本不知道如何解決這個問題。
我真的很感謝你的幫助!
非常感謝您的時間!
感謝您的回答!我會嘗試。 – LemonGraZ