无法为多个 segue 重用自定义 StoryboardSegue 类

Posted

技术标签:

【中文标题】无法为多个 segue 重用自定义 StoryboardSegue 类【英文标题】:Cannot reuse custom StoryboardSegue class for multiple segues 【发布时间】:2018-09-23 06:30:31 【问题描述】:

我正在尝试为多个视图控制器之间的转场创建自定义动画,以便新用户逐步设置他们的应用程序。我正在尝试对所有 segue 使用相同的自定义 UIStoryBoardSegue 类(我在其中覆盖 perform func),因为当它们都是相同的动画时,为每个创建一个似乎效率低下。

以下是第一次工作,但当我稍后再次使用相同的 UIStoryBoardSegue 类时,甚至没有命中断点。

override func perform() 
    let firstVCView = source.view!
    let secondVCView = destination.view!

    let screenWidth = UIScreen.main.bounds.size.width

    secondVCView.frame = secondVCView.frame.offsetBy(dx: screenWidth, dy: 0.0)

    let superView = firstVCView.superview
    superView?.insertSubview(secondVCView, aboveSubview: firstVCView)

    UIView.animate(withDuration: 0.35, animations:  () -> Void in
        firstVCView.frame = firstVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
        secondVCView.frame = secondVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
    , completion:  (finished) -> Void in
        self.source.dismiss(animated: false, completion: nil)
    )

知道缺少什么,或者有更好的方法来实现我想要做的事情吗?谢谢。

【问题讨论】:

【参考方案1】:

让我回答你的问题。在动画结束时,您忘记了在源控制器和目标控制器之间建立关系。换句话说,您必须手动显示您的目的地。

如果您不想从 vc 堆栈中删除源视图控制器,请不要关闭源视图控制器并添加 self.source.present(self.destination, animated: false, completion: nil),像下面这样。

 UIView.animate(withDuration: 0.35, animations:  () -> Void in
        firstVCView.frame = firstVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
        secondVCView.frame = secondVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
    , completion:  (finished) -> Void in
           self.source.present(self.destination, animated: false, completion: nil)
      //  self.source.dismiss(animated: false, completion: nil)

    )

如果要关闭,则必须使用源 vc 的父 vc 来推送或呈现目标 vc,例如 UINavigationViewContoller 或 UITabViewController。希望这能解决您的问题。

【讨论】:

以上是关于无法为多个 segue 重用自定义 StoryboardSegue 类的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义 segue 动画将一个视图替换为另一个视图?

无法使用自定义 segue 和 Storyboard 调整 UIViewController 的大小

关闭自定义警报视图并解除 segue 问题?

无法使用 Show Detail Segue 自定义 UINavigationBar

自定义 Segue NavBar 后退按钮

Swift 3 - 使用多个自定义单元重用单元的问题