我已经看了几个例子,看起来这曾经是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)
}