iOS希望在按下按钮时延迟视图控制器之间的segue

Posted

技术标签:

【中文标题】iOS希望在按下按钮时延迟视图控制器之间的segue【英文标题】:iOS Looking to delay segue between view controllers when button is pressed 【发布时间】:2017-08-08 07:29:53 【问题描述】:

我对 swift 和 Objective C 还很陌生,我有一个应用程序,它可以在按下按钮时从主视图控制器转到第二个视图控制器。第二个视图控制器打开一个摄像头,每次我点击按钮时,摄像头打开都会有一些延迟。我认为这与线程以及进程的处理方式有关。

我想在我的第一个视图控制器上的按钮放置和第二个视图控制器显示在屏幕上之间引入延迟。是否有可以通过这种方式应用的延迟?

这是我的主视图控制器的代码:

import UIKit

class ViewController: UIViewController 

    @IBAction func itemAction(_ sender: AnyObject) 
        performSegue(withIdentifier: "segue", sender: self )
    

    @IBAction func logosAction(_ sender: Any) 
        performSegue(withIdentifier: "segue2", sender: self )
    

    @IBOutlet var itemsButton: UIButton!

    @IBOutlet var carsButton: UIButton!


    override func viewDidLoad() 
        super.viewDidLoad()

        itemsButton.layer.cornerRadius = 10
        itemsButton.clipsToBounds = true

        // Do any additional setup after loading the view, typically from a nib.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


谢谢!

【问题讨论】:

我认为您可能应该考虑解决延迟问题。你能告诉我们你是如何添加相机层的吗?我在 viewDidAppear 中添加了它并且工作正常 我在这里使用第一个屏幕连接到这个开源代码。相机初始化在此视图控制器中进行:github.com/tensorflow/tensorflow/blob/master/tensorflow/… 参考这个:developer.apple.com/documentation/objectivec/nsobject#//…: 【参考方案1】:

每当您使用performSegue 方法时,您都需要这样使用

在延迟 10 秒的示例中

DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: 
   self.performSegue(withIdentifier: "segue", sender: self )
)

更新

在此示例中延迟 5 秒

DispatchQueue.main.asyncAfter(deadline:.now() + 5.0, execute: 
   self.performSegue(withIdentifier:"segue",sender: self)
)

【讨论】:

感谢您的回答,不幸的是,将其添加到我的代码中根本不会导致 10 秒延迟,我一定是做错了什么。我有如下代码,并且在按下项目按钮后预计会有 10 秒的延迟。 @IBAction func itemAction(_ sender: AnyObject) DispatchQueue.main.asyncAfter(deadline:.now() + 5.0, execute: self.performSegue(withIdentifier:"segue",sender: self) ) 我错过了什么吗在这里? 我不认为你错过了什么。我可能会因为cleaning codeproject 而发生。但是,如果它工作正常,那么请投票给我的答案,以便有人可以帮助解决这个问题。我还在更新的支票中添加了您的代码谢谢 @Viv 你可能会在故事板中为按钮设置segue。从视图控制器添加手动 segue 以使此延迟生效 @GoodSp33d 是的!就是这样! @APKAPPS 感谢您的回答!绝对让我走上正轨:)【参考方案2】:
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) 
    self.performSegue(withIdentifier: "segue", sender: self )

let timer = Timer.scheduledTimer(withTimeInterval: 10.0, repeats: false)  (timer) in
    self.performSegue(withIdentifier: "segue", sender: self )

【讨论】:

谢谢!我尝试按如下方式实现,并且在按下按钮后没有任何延迟。我肯定做错了什么,但不确定是什么:@IBAction func itemAction(_ sender: AnyObject) let timer = Timer.scheduledTimer(withTimeInterval: 10.0, repeats: false) (timer) in self.performSegue(withIdentifier: "segue", 发件人: self ) @Viv 下面的链接可能对你有用***.com/a/39845573

以上是关于iOS希望在按下按钮时延迟视图控制器之间的segue的主要内容,如果未能解决你的问题,请参考以下文章

执行 segue 后,文本字段永久位于标签中

通过 segue 在视图控制器之间传递数据

在发送者视图控制器被解雇后执行 segue

按下页面时执行 Segue

iOS segue 慢 - 即使没有对destinationViewController 进行任何处理

在swift3中按下按钮时如何以编程方式执行segue或呈现视图