Swift:嵌入在导航控制器中的视图之间的自定义转场

时间:2021-06-15 23:42:04

标签: swift uinavigationcontroller segue

我仍然处于学习 swift 和制作应用程序的开始阶段。所以我已经道歉,因为我的问题可能非常明显,但我无法通过几天的每项研究来解决它。我制作了一个小应用程序,在导航控制器中嵌入了几个视图。当我使用默认转场(以模态显示或呈现)时,它运行良好。但我想通过制作和使用自定义转场来改进它。我创建了这个类并在嵌入在 NavigationVC 中的视图之间使用它。然后它不起作用。当我在视图中按下按钮时,什么也没有发生。问题似乎不是来自自定义转场,因为它在未嵌入 NVC 的视图之间使用时效果很好。因此,在 NVC 中使用自定义转场可能是一个更基本的问题。那不可能吗?或者,可以针对导航堆栈中的视图修改代码。这里是自定义转场:

class CustomSegueRotation : UIStoryboardSegue {

override func perform() {
    let initialViewController = self.source.view
    let destinationViewController = self.destination.view
    let rotation = CAKeyframeAnimation (keyPath: "transform.rotation.y")
    rotation.values = [0, CGFloat.pi]
    rotation.autoreverses = false
    initialViewController?.addSubview(destinationViewController!)
    
    UIView.animate(withDuration: 0.3, delay: 0.05, options: .curveEaseInOut, animations: {
        initialViewController?.layer.add(rotation, forKey: nil)
    }, completion: nil)
}}

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您是否尝试过提供自定义 UINavigationControllerDelegate 来提供您希望用于过渡的动画?

https://developer.apple.com/documentation/uikit/uinavigationcontrollerdelegate/1621846-navigationcontroller

您可能想要实现协议 UIViewControllerAnimatedTransitioning https://developer.apple.com/documentation/uikit/uiviewcontrolleranimatedtransitioning 来描述您的动画。

然后从我上面提到的委托方法返回这个实现。最后,将导航控制器上的委托设置为自定义导航控制器委托的实例。

相关问题