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

Posted

技术标签:

【中文标题】Swift:嵌入在导航控制器中的视图之间的自定义segue【英文标题】:Swift : custom segue between views embedded in a navigation controller 【发布时间】:2021-06-15 23:42:04 【问题描述】:

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

类 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】:

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

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

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

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

【讨论】:

以上是关于Swift:嵌入在导航控制器中的视图之间的自定义segue的主要内容,如果未能解决你的问题,请参考以下文章

视图控制器之间的自定义转换,包括导航栏

Swift:删除嵌入在导航控制器中的表格视图控制器页脚下方的空间

在嵌入在两个独立容器控制器中的视图之间实现委托

Swift - 在 UIPageViewController 中的 3 个不同视图控制器之间导航按钮

iOS swift中的自定义视图出口在视图控制器中不起作用

从弹出视图控制器 Swift 中转接