Swift viewDidApper时调用可重复任务
我可能完全走错了方向,但我试图实现的是先加载一些视图,然后调用一些将无限期运行的方法,同时给用户提供与该视图交互的可能性 我的第一个猜测是将viewdiapper与UIView.animate一起使用,如下所示Swift viewDidApper时调用可重复任务,swift,cocoa-touch,uiviewcontroller,infinite-loop,Swift,Cocoa Touch,Uiviewcontroller,Infinite Loop,我可能完全走错了方向,但我试图实现的是先加载一些视图,然后调用一些将无限期运行的方法,同时给用户提供与该视图交互的可能性 我的第一个猜测是将viewdiapper与UIView.animate一起使用,如下所示 class MainView: UIView { ... func animateTheme() { //want this to print out infinitely print("Test")
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)
}
}
情况是,我只能看到一个“测试”打印出来,但这必须无限地调用。此外,正如我提到的,一旦加载了所有内容,用户就需要能够与视图交互
非常感谢您的帮助。我在一个加载
UIWebView的ViewController上做了类似的操作。加载网页时,我会显示一个带有文本“加载”的ui标签
,每隔1.5秒我会在文本末尾添加一个句点。我认为你上面描述的方法和我下面展示的方法具有相同的效果,两者都不会被视为无限循环
private func showLoadingMessage(){
let label = loadingLabel ?? UILabel(frame: CGRect.zero)
label.text = "Loading"
view.addSubview(label)
loadingLabel = label
addEllipsis()
}
private func addEllipsis() {
if webpageHasLoaded { return }
guard let labelText = loadingLabel?.text else {
return
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
self.loadingLabel?.text = labelText + "."
self.addEllipsis()
}
}
viewdide
确实会在加载视图时被称为latest,但我认为用户在加载视图之前没有时间进行交互
如果要在加载所有内容后加载动画,可以创建一个计时器并等待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)
首先,非常感谢您的回复。我应该更具体地说明这个案子。我想要实现的是,当所有东西都被加载时,用户可以开始交互,并且有一个进程在后台运行(以无限的方式),例如,某个可见对象不断地改变它的颜色。所以你想做一个无限的动画@RafalK?这正是我需要的:)@RafalK,检查更新,你只需要改变参数和你需要的动画,但这应该可以帮助你开始。我从一个非常类似的东西开始-改变了帖子,以反映我在一开始的位置。情况是,我只能看到“Test”字符串被打印一次。我不能用这种方法实现无限循环。。。