Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- class TransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate {
- var startFrame = CGRect()
- var dissmis = false
- func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
- return PresentationController(presentedViewController: presented, presentingViewController: presenting)
- }
- func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
- dissmis = false
- return self
- }
- func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
- dissmis = true
- return self
- }
- }
- extension TransitioningDelegate: UIViewControllerAnimatedTransitioning {
- func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
- return 0.4
- }
- func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
- if let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey), let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) {
- if !dissmis {
- let toView = toViewController.view
- let fromView = fromViewController.view
- transitionContext.containerView()!.addSubview(toView)
- let toSx = startFrame.width / toView.frame.width
- let toSy = startFrame.height / toView.frame.height
- let fromSx = fromView.frame.width / startFrame.width
- let fromSy = fromView.frame.height / startFrame.height
- toView.transform = CGAffineTransformMakeScale(toSx, toSy)
- toView.frame.origin = startFrame.origin
- toView.alpha = 0
- let height = fromView.frame.height - (startFrame.origin.y + startFrame.height)
- var y = -self.startFrame.origin.y * fromSy
- if height < 0 {
- fromView.frame.size.height += -height
- } else if startFrame.origin.y < 0 {
- fromView.frame.size.height += -startFrame.origin.y
- fromView.frame.origin.y = startFrame.origin.y
- y = 0
- let collectionController = fromViewController as! UICollectionViewController
- collectionController.collectionView?.contentOffset.y = (collectionController.collectionViewLayout as! UICollectionViewFlowLayout).sectionInset.top
- }
- UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0, options: [], animations: {
- toView.alpha = 1
- toView.transform = CGAffineTransformIdentity
- toView.frame.origin = CGPoint(x: 0, y: 0)
- fromView.transform = CGAffineTransformMakeScale(fromSx, fromSy)
- fromView.frame.origin.x = -self.startFrame.origin.x * fromSx
- fromView.frame.origin.y = y
- }, completion: { _ in
- transitionContext.completeTransition(true)
- })
- } else {
- let fromView = fromViewController.view
- let toView = toViewController.view
- let fromSx = startFrame.width / fromView.frame.width
- let fromSy = startFrame.height / fromView.frame.height
- transitionContext.containerView()!.addSubview(fromView)
- fromView.alpha = 1
- UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0, options: [], animations: {
- fromView.alpha = 0
- fromView.transform = CGAffineTransformMakeScale(fromSx, fromSy)
- fromView.frame.origin.x = self.startFrame.origin.x
- fromView.frame.origin.y = self.startFrame.origin.y
- toView.transform = CGAffineTransformIdentity
- toView.frame.origin = CGPoint(x: 0, y: 0)
- }, completion: { _ in
- transitionContext.completeTransition(true)
- })
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment