ios - UINavigationController 有两个代表?

标签 ios swift animation uiviewcontroller uinavigationcontroller

假设我有一个 UINavigationController,我想在其上执行自定义转换。为了方便起见,我定义了一个过渡类:

class WTPTransition: NSObject
{
    // This is our Interaction Controller, which conforms to UIViewControllerInteractiveTransitioning. Apple's concrete class suits our needs.
    var interactionController : UIPercentDrivenInteractiveTransition?
}

extension WTPTransition : UIViewControllerAnimatedTransitioning
{
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 1
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        let toView   = transitionContext.viewController(forKey: .to)!.view!
        let fromView = transitionContext.viewController(forKey: .from)!.view!

        transitionContext.containerView.insertSubview(toView, belowSubview: fromView)

        UIView.animate(withDuration: transitionDuration(using: transitionContext), animations: {
            fromView.alpha = 0.0
        }, completion: { finished in
            transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
        })
    }
}

然后我扩展它以便我可以简单地设置 UINavigationController 的 delegate 属性并获得我的转换:

extension WTPTransition : UINavigationControllerDelegate
{
    func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return self
    }

    func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
        return interactionController
    }
}

哪个工作得很好,但如果我想让另一个类观察同一个导航 Controller 的事件会怎样?我不能有两个对象作为它的委托(delegate),那么正确的模式是什么?将转换逻辑之类的东西与观察 Controller 的显示或关闭分离似乎很自然。

最佳答案

我认为这是非常肮脏的架构。

  1. 动画是仅在转换处于事件状态时才需要的对象。
  2. 您应该能够更改某些 View Controller 的动画。

我认为您可以创建委托(delegate)类,它会创建出现和消失的动画。

关于ios - UINavigationController 有两个代表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842616/

相关文章:

ios - 选择单元格内的图表时,如何停用 tableView 单元格内的垂直滚动?

ios - 在哪里放置 MVC 的编程约束

ios - Firebase 在 Swift 中使用 PromiseKit/AwaitKit 调用永远不会返回

ios - 使用 RxSwift 时未设置 Tableview 数据

javascript - 如何为 svg 的整个 "path"元素设置动画?

ios - SwiftUI 动画打破屏幕旋转

ios - 结束触摸时的按钮事件

ios - TextView 字符串中子字符串的颜色

ios - 如何快速创建过滤器数组

javascript - 如何使用javascript命令扩展视频