在viewDidApper时调用可重复的任务

时间:2017-05-22 18:09:54

标签: swift cocoa-touch uiviewcontroller infinite-loop

我可能正朝着完全错误的方向前进,但我想要实现的是首先加载一些视图并调用一些后续无限运行的方法,同时让用户有可能与此进行交互图。

我的第一个猜测是将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)    
    }
}

案例是我只能看到打印出一个“测试”,但必须无限调用。另外,正如我所提到的,一旦所有内容都被加载,用户需要有可能与视图交互。

非常感谢您的任何帮助。

2 个答案:

答案 0 :(得分:1)

在加载视图时,

setWatchFaceStyle(new WatchFaceStyle.Builder(Watchface.this) .setShowUnreadCountIndicator(true) .setStatusBarGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM) .setAcceptsTapEvents(true) .build()); 确实会被调用最新版本,但我认为用户在加载视图之前无法或将有时间进行交互。

如果要在加载所有内容后加载动画,可以创建一个计时器并等待x秒,然后再执行此操作。以下示例将在启动后10秒钟调用。

ViewDidAppear

<强>更新
要进行无限循环,您可以使用以下代码段:

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
}

答案 1 :(得分:0)

我在一个加载UIWebView的ViewControllers上做了类似的事情。当网页加载时,我显示UILabel文本“正在加载”,每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()
    }
}