ViewController slide animation

后端 未结 3 2050
花落未央
花落未央 2020-12-09 19:56

I want to create an animation like the iOS app facebook at tabswitch[1]. I have already tried to develop some kind of animation, the problem that

3条回答
  •  情深已故
    2020-12-09 20:33

    If you want something for pushViewController navigation, you can try this.

    However, when switching between tabs on a TabBarController, this will not work. For that, I'd go with @mihai-erős 's solution

    Change the Animation duration as per your liking, and assign this class to your navigation segues, for a Slide Animation.

    class CustomPushSegue: UIStoryboardSegue {
    
        override func perform() {
            // first get the source and destination view controllers as UIviews so that they can placed in navigation stack
    
            let sourceVCView = self.source.view as UIView!
            let destinationVCView = self.destination.view as UIView!
            let screenWidth = UIScreen.main.bounds.size.width
    
            //create the destination view's rectangular frame i.e starting at 0,0 and equal to screenwidth by screenheight
            destinationVCView?.transform = CGAffineTransform(translationX: screenWidth, y: 0)
    
            //the destinationview needs to be placed on top(aboveSubView) of source view in the app window stack before being accessed by nav stack
            // get the window and insert destination View
            let window = UIApplication.shared.keyWindow
            window?.insertSubview(destinationVCView!, aboveSubview: sourceVCView!)
    
    
            // the animation: first remove the source out of screen by moving it at the left side of it and at the same time place the destination to source's position
            // Animate the transition.
            UIView.animate(withDuration: 0.3, animations: { () -> Void in
                sourceVCView?.transform = CGAffineTransform(translationX: -screenWidth,y: 0)
                destinationVCView?.transform = CGAffineTransform.identity
    
            }, completion: { (Finished) -> Void in
                self.source.present(self.destination, animated: false, completion: nil)
            }) 
        }
    }
    

提交回复
热议问题