这是我的代码:
@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()
)是错误的还是我必须使用不同类型的等待函数来使动画正常工作?
值得一提的是,当我在模拟器中运行代码时,我没有任何错误。
答案 0 :(得分:3)
仅当程序控制返回主事件时才更新UI
环。因此,您对r1.center
的修改将变得可见
仅当click()
方法返回时才会显示。
此外,您长时间阻止主线程,这通常很糟糕,因为没有处理任何事件且UI未更新,因此 应用程序变得反应迟钝。 长时间阻塞主线程可能会导致程序被操作系统杀死。
您可以使用计时器而不是使用更新位置的回调函数。
或者(如评论中所述),使用 Core Animation