如何创建一个自定义segue,它将在iOS 9中从右向左滑动新视图

时间:2016-08-03 02:29:49

标签: ios swift

我已经看了几个例子,看起来这曾经是Push segue的默认效果,现在已经弃用了。 Show或Present Modally segue的新默认动画是让新视图从底部滑入顶部。

在查看了如何创建自己的自定义segue的几个示例后,我正在使用下面的代码。我得到了我想要的效果,即将新视图从右到左滑入动画结束。在最后,当新视图完全显示在屏幕上时,有一个闪烁的堡垒,几秒钟后我看到旧视图,然后再次显示新视图。

请帮忙!感谢。

    class CustomStoryboardSegue: UIStoryboardSegue {

    override func perform() {

        let sourceVC = self.sourceViewController
        let destinationVC = self.destinationViewController

        sourceVC.view.addSubview(destinationVC.view)

        destinationVC.view.transform = CGAffineTransformMakeTranslation( sourceVC.view.frame.size.width, 0)

        UIView.animateWithDuration(0.25, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in

            destinationVC.view.transform = CGAffineTransformMakeTranslation(1.0, 1.0)

            }) { (finished) -> Void in
                destinationVC.view.removeFromSuperview()

                let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.001 * Double(NSEC_PER_SEC)))

                dispatch_after(time, dispatch_get_main_queue()) {

                    sourceVC.presentViewController(destinationVC, animated: false, completion: nil)
                }
        }
    }
}

更新

为了澄清上面代码中已完成的块,我将视图控制器的显示延迟一秒以避免获取

错误:对TableViewController的开始/结束外观转换的不平衡调用

因为我无法删除源视图并在同一时间显示目标视图。

为了测试这个,我删除了延迟并更新了我完成的块,如下所示,现在我收到了“不平衡的呼叫错误”。正如所料,但有趣的是,我也看到了转型结束时的眨眼。

}) { (finished) -> Void in
            destinationVC.view.removeFromSuperview()

            sourceVC.presentViewController(destinationVC, animated: false, completion: nil)

        }

0 个答案:

没有答案