2016-09-20 164 views
0

我有一個bar button item繼續下一個視圖controller.I在欄按鈕項上執行show segue,它有第一次延遲2秒然後它是正常的。延遲在執行Segue

我以前DispatchQueue如下,但它仍然不相同

@IBAction func addPressed(_ sender: AnyObject) { 
     DispatchQueue.main.async(execute: { 
      self.performSegue(withIdentifier: "showDetail",sender: self) 
     }) 

    } 

這是我的第二個VC

override func viewDidLoad(){ 
     super.viewDidLoad() 

    firstBtn.layer.borderWidth = 3 
    firstBtn.layer.borderColor = UIColor.white.cgColor 

    secondBtn.layer.borderWidth = 3 
    secondBtn.layer.borderColor = UIColor.white.cgColor 


    do{ 
     let correctSoundUrl: URL = URL(fileURLWithPath: Bundle.main.path(forResource: "btnTap", ofType: "wav")!) 
     self.goalsTapPlayer = try AVAudioPlayer(contentsOf: correctSoundUrl) 
     self.goalsTapPlayer.prepareToPlay() 
    } 
    catch{} 

} 
+0

嘗試與這一個DispatchQueue.main.async { self.performSegue(withIdentifier執行audioplayerloading: 「showDetail」,發件人:自己) } –

+0

@ Anbu.Karthik,它仍然有這樣的延遲 – Coder221

+0

是第二個VC加載的東西可能很重?也許嘗試加載'prepareForSegue'中的第二個VC? – Idan

回答

2

DispatchQueue.main.async這裏確實如它已經在主線程,如果在執行什麼它是從一個按鈕按下來調用的。

@IBAction func addPressed(_ sender: AnyObject) { 
     self.performSegue(withIdentifier: "showDetail",sender: self) 
} 

可能是你在有問題的prepareForSegueviewDidLoadviewWillAppear在一個控制器。

如果你在這些函數中有一些繁重的操作,你應該嘗試在後臺線程上執行它們。

DispatchQueue.global(qos: .background).async { 
    //Heavy operation 
    //... 
    DispatchQueue.main.async { 
     //Potential update of UI 
    } 
} 

你的情況,你可以嘗試或許在後臺

DispatchQueue.global(qos: .background).async { 
    do{ 
     let correctSoundUrl: URL = URL(fileURLWithPath: Bundle.main.path(forResource: "btnTap", ofType: "wav")!) 
     self.goalsTapPlayer = try AVAudioPlayer(contentsOf: correctSoundUrl) 
     self.goalsTapPlayer.prepareToPlay() 
    } 
    catch{} 
} 
+0

我是iOS新手,能否請您解釋後臺線程的含義 – Coder221

+0

您應該告訴我們,您想要打開的控制器應該做什麼。或者它目前在做什麼。比我們可以告訴你,如果這需要移動到另一個線程。MainThread主要用於與你的用戶界面進行交互,並且像後臺數據處理一樣很酷 –

+1

在程序中,你可以選擇在單獨的線程上執行一些代碼。這用於同時處理代碼的不同部分。在Swift和iOS中您將看到的最常見的用法是在後臺執行特別大量的代碼。這意味着你讓系統響應用戶的輸入併爲視圖設置動畫,因爲它意味着當系統找到時間來執行「背景」中的繁重工作。 – Moriya