当我尝试下雨时,为什么这个睡眠功能不起作用?

时间:2015-06-21 10:22:42

标签: ios swift animation

这是我的代码:

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

我在Xcode 7.0 beta中使用Swift。我使用UIButton来测试它并将其简化为一个雨滴。当我点击时,我想让它顺利移动(尽我所能)向下移动。

现在,它只是等待所有usleep(10000)函数完成(其中100个),因此它不会移动1秒钟然后向下移动20px。我使用sleep()函数(实际上usleep())是错误的还是我必须使用不同类型的等待函数来使动画正常工作?

值得一提的是,当我在模拟器中运行代码时,我没有任何错误。

1 个答案:

答案 0 :(得分:3)

仅当程序控制返回主事件时才更新UI 环。因此,您对r1.center的修改将变得可见 仅当click()方法返回时才会显示。

此外,您长时间阻止主线程,这通常很糟糕,因为没有处理任何事件且UI未更新,因此 应用程序变得反应迟钝。 长时间阻塞主线程可能会导致程序被操作系统杀死。

您可以使用计时器而不是使用更新位置的回调函数。

或者(如评论中所述),使用 Core Animation