Ios 自定义Segue类UIView动画问题

Ios 自定义Segue类UIView动画问题,ios,swift,animation,uiviewcontroller,segue,Ios,Swift,Animation,Uiviewcontroller,Segue,我在使用swift 3和iOS 8创建自定义segue时遇到问题。我试图通过从一个VC淡入黑屏,然后从黑色淡入第二个VC,在视图控制器之间切换。我试图通过使用下面的代码创建一个自定义segue来实现segue,但是它没有按照我希望的那样工作。我的目标是在黑色方块从0.5 alpha变为1.0 alpha时执行动画,然后显示第二个视图控制器,然后将黑色方块从1.0 alpha设置回0.5 alpha并将其删除。现在,它正确地完成了第一部分,但在动画完成后,您可以在第二个VC弹出之前短暂地看到第一个

我在使用swift 3和iOS 8创建自定义segue时遇到问题。我试图通过从一个VC淡入黑屏,然后从黑色淡入第二个VC,在视图控制器之间切换。我试图通过使用下面的代码创建一个自定义segue来实现segue,但是它没有按照我希望的那样工作。我的目标是在黑色方块从0.5 alpha变为1.0 alpha时执行动画,然后显示第二个视图控制器,然后将黑色方块从1.0 alpha设置回0.5 alpha并将其删除。现在,它正确地完成了第一部分,但在动画完成后,您可以在第二个VC弹出之前短暂地看到第一个VC。我应该如何更改代码以使转换更平滑并获得所需的结果

override func perform() {
    let sourceVC = self.source
    let destinationVC = self.destination

    let square = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
    square.alpha = 0.5
    square.backgroundColor = UIColor.black
    sourceVC.view.addSubview(square)

    UIView.animate(withDuration: 0.2, animations: {
        square.alpha = 1.0
    })

    UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
        square.alpha = 0.5
    }) { (finished) in
        sourceVC.present(destinationVC, animated: false, completion: nil)
    }
}

按以下方式更新代码,然后重试:

   UIView.animate(withDuration: 0.2, animations: {
        square.alpha = 1.0

UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
                    square.alpha = 0.5
                }) { (finished) in

    DispatchQueue.main.async {
      sourceVC.present(destinationVC, animated: false, completion: nil)
    }
    })
    }

它修复了旧问题,但现在动画的第二部分似乎没有运行。黑色方块变为1.0 alpha,然后似乎消失了,而destinationVC出现了。在此块DispatchQueue.main.async{}中写入所有UI更新任务,如更新alpha等。当我将square.alpha=0.5添加到DispatchQueue.main.async块中时,它使SourceVC立即更改为DestinationVC,而根本不使用方形动画。这就好像只有一个正常的表演片段。所以试着增加持续时间。我将两个动画的持续时间都增加到2秒,但仍然没有显示