2016-01-19 61 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