2017-08-08 69 views
1

我对swift和Objective C相当陌生,而且我有一个从主视图控制器到按钮按下的第二个视图控制器的应用程序。第二个视图控制器打开一个摄像头,每次点击按钮时,摄像头开启都会有一定的滞后。我认为这与线程有关,以及进程是如何处理的。iOS当按下按钮时,希望延迟视图控制器之间的延迟

我想介绍一下当我的第一个视图控制器上的按钮被放置和第二个viewcontroller被显示在屏幕上之间的延迟。有没有延迟可以用这种方式来应用?

下面是代码与按钮我的主视图控制器:

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. 
    } 

} 

谢谢!

+0

我想你也许应该寻找固定的延迟。你能告诉我们你是如何添加摄像机层的吗?我已经在viewDidAppear中添加了它,并且工作正常 – GoodSp33d

+0

我正在使用第一个屏幕来连接到此处的此开放源代码。相机初始化发生在这里的视图控制器: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/ios/camera/CameraExampleViewController.mm – Veejay

+0

请参阅:https://developer.apple。 com/documentation/objectivec/nsobject#// apple_ref/occ/instm/NSObject/performSelector:withObject:afterDelay: –

回答

3

无论何时用户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) 
}) 

希望这会帮助你的感谢。

+0

谢谢你的回答,不幸的是,在我的代码中添加这个并不会导致10秒的延迟,我必须做错事。我有如下代码,并在按下项目按钮后预计会有10秒的延迟。 @IBAction FUNC itemAction(_发件人:AnyObject){ DispatchQueue.main.asyncAfter(截止日期:。现在()+ 5.0,执行:{ self.performSegue(withIdentifier: “SEGUE”,发送方:自) } ) } 我在这里错过了什么吗? – Veejay

+0

我不认为你错过了那件事。我可能会因为“清洁代码”或“项目”而发生。但是,如果它工作的很好,那么请投票回答我的问题,以便有人能够帮助解决这个问题。我还在你的代码中添加了代码更新 谢谢 –

+2

@Viv你可能会在故事板中为按钮设置segue。从视图控制器添加人工赛格瑞这种延迟工作 – GoodSp33d

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

OR

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

谢谢!我试着按照下面的方式实现这一点,并且在按钮按下之后没有任何延迟。我肯定是做了一些不正确的事情,不知道是什么: @IBAction func itemAction(_ sender:AnyObject){ let timer = Timer.scheduledTimer(withTimeInterval:10.0,repeats:false){(timer)in self。 performSegue(withIdentifier: “SEGUE”,发件人:个体经营) }} – Veejay

+0

@Viv以下链接可能对你有用https://stackoverflow.com/a/39845573 –