2016-01-19 110 views
0

我想構建一個簡單的單一視圖應用程序,它在每次圖像更改之間運行時間延遲的圖像選擇的無限幻燈片放映。我爲此編寫的代碼如下。我試圖把它放到viewDidLoad和viewDidAppear中,但屏幕保持空白,我猜是因爲該函數永遠無法完成,因爲無限循環。Swift:如何永久重複代碼

我在iOS和tkinter之前學了一點Python,你的代碼會進入主循環。但我不太清楚如何在Swift中執行相應的操作。請問有人可以解釋爲什麼我遇到這個問題以及如何在Swift中執行此操作。謝謝。

var arrayimages: [UIImage] = [UIImage(named: "charizard")!,UIImage(named:"Flying_Iron_Man")!] 

var x: Int = 0 
var images: UIImage 
let arraycount = arrayimages.count 

repeat{ 
     images = arrayimages[(x % arraycount)] 
     sleep(1) 
     slideshow.image = images 
     x++ 
    } while true 

注:幻燈片是一個圖像視圖插座。

+0

不同時(真的)不工作? – dannybess

+0

這將不起作用的原因是因爲代碼正在主線程中執行,主線程是UI工作的線程,如果您阻止UI無法更新的主線程。通過執行無限循環,無限期地阻止主線程,所以UI永遠不會更新,並且圖像不會更改。建議您使用NSTimer的答案是很好的答案,但我想我會解釋爲什麼它不按您期望的方式工作。 – EmilioPelaez

回答

5

您正在尋找的NSTimer

let timer = NSTimer.scheduledTimerWithTimeInterval(
    1.0, target: self, selector: Selector("doYourTask"), 
    userInfo: nil, repeats: true) 

第一個參數是你想怎麼經常計時器火,第二個是什麼對象都將有被調用的選擇,第三個是選擇名稱,第四個是你想要作爲定時器對象上的參數傳遞的任何額外信息,第五個是這是否應該重複。

如果你想在未來的任何點停止代碼:

timer.invalidate() 
+0

感謝您解釋每個術語。這工作! – Physbox

3

創建一個重複的NSTimer:

var timer = NSTimer.scheduledTimerWithTimeInterval(2.0, 
    target: self, 
    selector: "animateFunction:", 
    userInfo: nil, 
    repeats: true) 

然後寫一個函數animateFunction:

func animateFunction(timer: NSTimer) 
{ 
    //Display the next image in your array, or loop back to the beginning 
} 
+0

謝謝!這幫助我更好地理解我需要做的事情,但對我而言並不合適。我必須使用'。'而不是像'tbondwilkinson **'所建議的'NSTImer'和'scheduledTimerWithTimeInterval'之間的'(''')。是否因爲我使用了不同的swift版本?(2.1) – Physbox

+0

不,這是因爲我主要工作在Objective -C這幾天用Swift語法變得有些生疏,我編輯了我的答案,現在是正確的語法了嗎? –

+0

是的,那工作:) – Physbox