微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。