swift - viewDidApper 时调用可重复任务

标签 swift cocoa-touch uiviewcontroller infinite-loop

我可能正朝着完全错误的方向前进,但我想要实现的是首先加载一些 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/

相关文章:

swift - Monads 和 AOP 相关?

ios - 如何使用 iOS 上的约束将 View 附加到键盘顶部边缘

swift - 异步解析的 future 不会触发

iphone - objective-c : When to use methods in App Delegate and when to use methods in View Controller

iphone - self.navigationController pushViewController 没有将 Controller 添加到堆栈

ios - Swift:在 View 中点击时出现隐藏的导航栏

ios - 不确定如何使用 CICrop 裁剪图像

ios - 应该相等的字符串比较不相等

iphone - Objective C/iPhone 中普通空间的 ASCII 值

ios - 如何向 MKMapView 添加宽半径注释?