UIStoryboardSegue:动画期间不显示视图

UIStoryboardSegue: view is not displayed during animation

当我的自定义 segue 动画正在执行时,目标视图显示为黑色。动画结束后出现view,看起来不错

截图如下:

动画场景:

segue/animation 完成后查看:

这是自定义转场 class:

class SegueToPreview: UIStoryboardSegue {

override func perform() {
    // Assign the source and destination views to local variables.
    var firstVCView = self.sourceViewController.view as UIView!
    var secondVCView = self.destinationViewController.view as UIView!

    // Get the screen width and height.
    let screenWidth = UIScreen.mainScreen().bounds.size.width
    let screenHeight = UIScreen.mainScreen().bounds.size.height

    // Specify the initial position of the destination view.
    secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)

    // Access the app's key window and insert the destination view above the current (source) one.
    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(secondVCView, aboveSubview: firstVCView)

    // Animate the transition.
    UIView.animateWithDuration(0.2, animations: { () -> Void in

        firstVCView.frame = CGRectOffset(firstVCView.frame, -screenWidth, 0.0)
        secondVCView.frame = CGRectOffset(secondVCView.frame, -screenWidth, 0.0)

        }) { (Finished) -> Void in
            self.sourceViewController.presentViewController(self.destinationViewController as! UIViewController,
                animated: false,
                completion: nil)
    }

}

虽然 unwind segue 工作正常,显示两个视图。

我假设在执行动画时未加载视图,但不知道如何解决。

您对目的地 vc 视图的初始位置设置不正确(假设您希望视图从右侧移入);你把它放在屏幕下方,而不是屏幕右侧,

secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)

这应该是,

secondVCView.frame = CGRectMake(screenWidth, 0, screenWidth, screenHeight)