我有一个bar button item
,它位于下一个视图控制器上。我在条形按钮项上实现了show segue
,它第一次延迟了2秒,然后是正常的。
我使用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 :(得分:2)
DispatchQueue.main.async
这里什么也没做,因为如果从按下按钮调用它,它已经在主线程上执行了。
@IBAction func addPressed(_ sender: AnyObject) {
self.performSegue(withIdentifier: "showDetail",sender: self)
}
您可能在下一个控制器的prepareForSegue
或viewDidLoad
,viewWillAppear
中遇到问题。
如果你在这些函数中有一些繁重的操作,你应该尝试在后台线程上执行它们。
DispatchQueue.global(qos: .background).async {
//Heavy operation
//...
DispatchQueue.main.async {
//Potential update of UI
}
}
在您的情况下,您可以尝试在后台执行audioplayerloading
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{}
}