【问题标题】:How to program delay?如何编程延迟?
【发布时间】:2018-04-19 11:09:44
【问题描述】:

我有两个视图控制器。

我在第一个 VC 中制作了 imageview(在 Gif 文件中)。 5 秒后,我希望将页面传递给第二个 vc。第一个VC代码是这样的:

class LemonVC: UIViewController {

    @IBOutlet weak var LemonGif: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()


        LemonGif.loadGif(name: "sufoo")

    //        DispatchQueue.main.asyncAfter(deadline: .now() + 
    .seconds(4), execute: {
    //
    //        })
        // Do any additional setup after loading the view.
    }

第一个 VC 名称是 LemonVC

第二个 VC 名称是 SecondVC

【问题讨论】:

  • 我可能不会在viewDidLoad 开始,但可以考虑viewDidAppear 作为初学者
  • 我认为您正在寻找的另一个命令是 performSegue ...假设您实际上在视图控制器之间命名了 segue

标签: ios swift xcode uiviewcontroller delay


【解决方案1】:

一种可能性是在第一个和第二个控制器之间使用 segue 来定义导航路径(从第一个控制器中的“黄色”点拖动到第二个控制器上。本示例使用 show 类型)

确保你给它一个标识符名称,你的代码中需要这个。

我可能会使用viewDidAppear 而不是viewDidLoad,至少这意味着视图已经过渡到屏幕。

然后,你需要做的就是使用UIViewController#performSegue 执行segue,这将呈现下一个控制器

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: {
        self.performSegue(withIdentifier: "skipTo", sender: self)
    })
}

【讨论】:

  • 很高兴它可以提供帮助 - 请记住,给猫剥皮的方法总是不止一种 - 这只是做你想做的事情的一种方法;)
【解决方案2】:

试试这个:

  DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5), execute: {
// go some where
// example
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
        let introRootVC = storyBoard.instantiateInitialViewController() // it's main controller, if you want to another create Story board ID 
        self.present(introRootVC!, animated: true, completion: nil)
})

您可以更改延迟,seconds(5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    相关资源
    最近更新 更多