2015-06-21 54 views
3

這是我的代碼:當我嘗試製作動畫雨時,爲什麼這個睡眠功能不起作用?

@IBAction func click(sender: UIButton) { 
    for var x = 0; x<100; ++x{ 
     r1.center.y += 0.2 
     usleep(10000) 
    } 
} 

我在Xcode 7.0測試版使用斯威夫特。我用UIButton來測試它,並將其簡化爲一個雨滴。當我點擊時,我希望它順利移動(儘可能最好)。

現在,它只是等待所有​​函數完成(其中100個函數),因此它不會移動1秒,然後向下移動20px。我是否使用sleep()函數(其實是usleep())錯誤,還是必須使用不同類型的等待函數才能使動畫正常工作?

值得一提的是,當我在模擬器中運行代碼時,我不會收到任何錯誤。

+0

永遠不要在主線程中調用'sleep'或'usleep'(或任何與之相關的東西)。正如馬丁 - [R已經在下面他的回答中指出,你需要一個動畫... – Michael

回答

3

僅在程序控制返回到主事件 循環時才更新UI。因此,只有在click()方法返回時,對r1.center的修改纔會顯示爲 。

此外,您正在阻塞主線程很長一段時間,這通常是不好的,因爲沒有事件處理並且UI未更新,所以 應用程序變得無響應。 阻塞主線程時間過長可能會導致程序被操作系統殺死。

您可以使用定時器代替更新位置的回調函數。

或者(如評論中所述),使用 Core Animation

+0

類FUNC scheduledTimerWithTimeInterval(_秒:NSTimeInterval, 目標目標:AnyObject, 選擇aSelector:選擇, USERINFO USERINFO:AnyObject? 重複重複:Bool) - > NSTimer我嘗試了這樣的東西,這是從蘋果的文檔網站,但我總是得到一個錯誤,大部分時間它與添加逗號有關,但我認爲我不完全理解語法或如何格式化它。你能幫我嗎? @Martin R – CoolPenguin

+0

@CoolPenguin:我試圖回答你的問題*「爲什麼這個睡眠功能不工作」*。你應該在這裏找到很多NSTimer的例子,例如http://stackoverflow.com/questions/30945310/countdown-with-several-decimal-slots-using-nstimer-in-swift。如果你仍然無法弄清楚,請提出一個新問題,因爲這是一個不同的問題。 –

相關問題