Swift 自定义过渡关闭动画控制器尚未调用

问题描述

我写了一个自定义过渡,当前的动画师工作正常,但是当我关闭第二个视图时,没有调用关闭动画师,这是为什么? 我正在将容器视图转换为另一个视图 我首先使用 self.removeFromParent() 从第一个视图中删除 calendarView 的引用,然后将其呈现给第二个视图

GIF

Storyboard

过渡代表

final class TimeMachineTransitioningDelegate: NSObject,UIViewControllerTransitioningDelegate {
    
    var interactivedismiss = true
    
    init(from presented: UIViewController,to presenting: UIViewController) {
        super.init()
    }
    
    public func animationController(forPresented presented: UIViewController,presenting: UIViewController,source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return TimeMachineViewPresentAnimationController()
    }
        
    public func animationController(fordismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return  TimeMachineViewdissmissAnimationController()
    }
    
} 

现在的动画师

class TimeMachineViewPresentAnimationController: NSObject,UIViewControllerAnimatedTransitioning {
    
   
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.5
    }
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        
       
        
        guard
            let fromViewConroller =  transitionContext.viewController(forKey: .from) as? CalendarViewController,let toViewController = transitionContext.viewController(forKey: .to) as? TimeMachineViewController,let fromView = transitionContext.view(forKey: .from),let toView = transitionContext.view(forKey: .to)
        else {
            print("Found nil when unwrapping guard attributes,location: 'TimeMachineViewPresentAnimation Line \(#line)'")
            transitionContext.completeTransition(false)
            return
        }
        
        let navBarheight = (fromViewConroller.view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0) + (fromViewConroller.navigationController?.navigationBar.frame.height ?? 0.0)
 
        toViewController.calendarView = fromView
        toViewController.calendarViewController = fromViewConroller
        toViewController.calendarViewPosition = CGPoint(x: fromViewConroller.topView.frame.origin.x,y: fromViewConroller.topView.frame.origin.y + navBarheight)
        
        
        let containerView = transitionContext.containerView
        containerView.addSubview(toView)
        
        toViewController.view.backgroundColor = UIColor.white.withAlphaComponent(0)
        toViewController.initialize()
        
        UIView.animate(withDuration: 0.8,animations: {
            toViewController.view.backgroundColor = UIColor.white.withAlphaComponent(1)
        }) { _ in
            
            transitionContext.completeTransition(true)
            toViewController.calendarPages.first?.addSubview(fromView)
        }
 
        
    }
    
    
}

解雇动画师

class TimeMachineViewdissmissAnimationController: NSObject,UIViewControllerAnimatedTransitioning {
    
   
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.5
    }
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        
        print("disMISSED") // has not printed out 
    }
            
  } 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)