2017-02-03 119 views
-1

我一直在使用这段代码来创建一个不同的视图控制器。Swift3中的自定义转换问题

let details = storyboard?.instantiateViewController(withIdentifier: "ViewMainMurmur") 
details?.modalTransitionStyle = .coverVertical 
present(details!, animated: true, completion: nil) 

而且我已经创建了一个slideAnimator类定制我的过渡

class SlideAnimator: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate { 

    let duration = 0.5 

    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     return self 
    } 

    func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     return self 
    } 

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { 
     return duration 
    } 

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 
     guard let fromView = transitionContext.view(forKey: UITransitionContextViewKey.from) else { 
      return 
     } 

     guard let toView = transitionContext.view(forKey: UITransitionContextViewKey.to) else { 
      return 
     } 

     let container = transitionContext.containerView 

     let screenOffUp = CGAffineTransform(translationX: 0, y: -container.frame.height) 
     let screenOffDown = CGAffineTransform(translationX: 0, y: container.frame.height) 

     container.addSubview(fromView) 
     container.addSubview(toView) 

     toView.transform = screenOffUp 

     UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.8, options: [], animations: { 

      fromView.transform = screenOffDown 
      fromView.alpha = 0.5 
      toView.transform = CGAffineTransform.identity 
      toView.alpha = 1 

     }) { (success) in 
      transitionContext.completeTransition(success) 
     } 
    } 
} 

现在的问题是,我只知道如何使用slideAnimator上课的时候我有画的故事情节进行SEGUE。 当我使用present()时,如何使用slideAnimator?

+1

为什么不使用segue? – Klevison

回答

0

在致电present之前,将呈现的视图控制器的transitioningDelegate设置为您的SlideAnimator。

+0

Thanx,我认为多数民众赞成在即时通讯寻找,但仍然没有为我工作: 让登录= storyboard?.instantiateViewController(withIdentifier:“ViewEvents”); login?.transitioningDelegate = SlideAnimator(); present(login !, animated:true,completion:nil) –

+0

这样说'transitioningDelegate = SlideAnimator()'就会导致一个实例弹出并立即消失。这对你没有任何好处。您需要带有_persistence_的_existing_ SlideAnimator。它需要是某个持久实例的_property_。 – matt