我可能正朝着完全错误的方向前进,但我想要实现的是首先加载一些 View 并调用一些方法,这些方法将在之后无限运行,同时让用户有可能与之交互查看。
我的第一个猜测是将 viewDidApper 与 UIView.animate 一起使用,如下所示;
class MainView: UIView {
...
func animateTheme() {
//want this to print out infinitely
print("Test")
}
}
class ViewController: UIViewController {
@IBOutlet weak var mainView: MainView!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(withDuration: 1.0, delay: 0.0, options: .repeat, animations: {
self.mainView.animateTheme()
}, completion: nil)
}
}
情况是我只能看到打印出一个“测试”,但这必须被无限调用。此外,正如我提到的,一旦所有内容都加载完毕,用户需要能够与 View 进行交互。
非常感谢您的帮助。
最佳答案
ViewDidAppear
确实会在加载 View 时调用最新的,但我不认为用户可以或将有时间在它加载之前进行交互。
如果您想在加载完所有内容后加载动画,您可以创建一个计时器并等待 x 秒后再执行此操作。下面的示例将在启动 10 秒后调用。
var timer = Timer()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
timer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(animateSomething), userInfo: nil, repeats: false)
}
func animateSomething() {
// Animate here
}
更新
要进行无限循环,您可以使用以下代码段:
UIView.animate(withDuration: 5.0, delay: 0, options: [.repeat, .autoreverse], animations: {
self.view.frame = CGRect(x: 100, y: 200, width: 200, height: 200)
}, completion: nil)
关于swift - viewDidApper 时调用可重复任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44119432/