在我的iPhone项目中,我有一个退出的视频,退出PlayView。 在内部展开功能如下所示我有一个延迟0.05秒的计时器,然后执行" autoSegue"功能又转向其他屏幕。这在iOS 8上运行良好,但对于iOS7设备,我必须显着增加此延迟(最多1.0秒),否则,它会给出"另一个segue已经在进行中"错误。
有没有办法执行" autoSegue"当任何先前的segue完成后自动运行?
@IBAction func unwindToPlay (sender: UIStoryboardSegue){
var del = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "autoSegue", userInfo: nil, repeats: false)
}
答案 0 :(得分:1)
从viewDiDAppear
调用您的autoSegue,而不是从您展开的segue调用。只有在所有动画过渡完成后才会调用此方法。你不会需要一个计时器。但您可能希望在展开segue中设置某种标记,以便在发生解除segue后触发 操作。
修改
由于这似乎不适合你,这里有一些代码......
class RedViewController: UIViewController {
var segueDidUnwind: Bool = false
@IBAction func unwindToRed(sender: UIStoryboardSegue) {
println("unwindToRed");
segueDidUnwind = true
}
override func viewDidAppear(animated: Bool) {
println("viewDidAppear");
if (segueDidUnwind) {
self.showVC()
segueDidUnwind = false
}
}
func showVC() {
let vc = UIViewController()
self.presentViewController(vc, animated: true, completion: nil)
}
}
它是this answer的扩展......我们可以将日志记录扩展到...
actionForUnwindButton
prepareForSegue
unwindToRed
viewDidAppear
如果您的代码中没有调用viewDidAppear
,那么您的项目必须具有其他结构,这在问题中并不明显。