问题描述
我写了一个自定义过渡,当前的动画师工作正常,但是当我关闭第二个视图时,没有调用关闭动画师,这是为什么? 我正在将容器视图转换为另一个视图 我首先使用 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 (将#修改为@)