如何编程延迟?

Posted

技术标签:

【中文标题】如何编程延迟?【英文标题】: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 【参考方案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)

【讨论】:

以上是关于如何编程延迟?的主要内容,如果未能解决你的问题,请参考以下文章

在 Delphi 中编程延迟的最佳方法是啥?

如何以编程方式启用侧音/麦克风直通

使用lambda编程之延迟执行

交易系统开发技能及面试之低延迟编程技术

交易系统开发技能及面试之低延迟编程技术

交易系统开发技能及面试之低延迟编程技术