如何解决Swift 自定义过渡关闭动画控制器尚未调用
我写了一个自定义过渡,当前的动画师工作正常,但是当我关闭第二个视图时,没有调用关闭动画师,这是为什么? 我正在将容器视图转换为另一个视图 我首先使用 self.removeFromParent() 从第一个视图中删除 calendarView 的引用,然后将其呈现给第二个视图
过渡代表
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 举报,一经查实,本站将立刻删除。