Guest User

Untitled

a guest
Oct 7th, 2016
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. import UIKit
  2.  
  3. class TransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate {
  4.  
  5. var startFrame = CGRect()
  6. var dissmis = false
  7.  
  8.  
  9.  
  10.  
  11. func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? {
  12. return PresentationController(presentedViewController: presented, presentingViewController: presenting)
  13. }
  14.  
  15. func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
  16. dissmis = false
  17. return self
  18. }
  19.  
  20. func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
  21. dissmis = true
  22. return self
  23. }
  24. }
  25.  
  26.  
  27. extension TransitioningDelegate: UIViewControllerAnimatedTransitioning {
  28. func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
  29. return 0.4
  30. }
  31.  
  32. func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
  33. if let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey), let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) {
  34. if !dissmis {
  35. let toView = toViewController.view
  36. let fromView = fromViewController.view
  37.  
  38. transitionContext.containerView()!.addSubview(toView)
  39.  
  40. let toSx = startFrame.width / toView.frame.width
  41. let toSy = startFrame.height / toView.frame.height
  42. let fromSx = fromView.frame.width / startFrame.width
  43. let fromSy = fromView.frame.height / startFrame.height
  44.  
  45. toView.transform = CGAffineTransformMakeScale(toSx, toSy)
  46. toView.frame.origin = startFrame.origin
  47. toView.alpha = 0
  48.  
  49. let height = fromView.frame.height - (startFrame.origin.y + startFrame.height)
  50.  
  51. var y = -self.startFrame.origin.y * fromSy
  52. if height < 0 {
  53. fromView.frame.size.height += -height
  54. } else if startFrame.origin.y < 0 {
  55. fromView.frame.size.height += -startFrame.origin.y
  56. fromView.frame.origin.y = startFrame.origin.y
  57. y = 0
  58. let collectionController = fromViewController as! UICollectionViewController
  59. collectionController.collectionView?.contentOffset.y = (collectionController.collectionViewLayout as! UICollectionViewFlowLayout).sectionInset.top
  60. }
  61.  
  62.  
  63. UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0, options: [], animations: {
  64.  
  65. toView.alpha = 1
  66. toView.transform = CGAffineTransformIdentity
  67. toView.frame.origin = CGPoint(x: 0, y: 0)
  68.  
  69. fromView.transform = CGAffineTransformMakeScale(fromSx, fromSy)
  70. fromView.frame.origin.x = -self.startFrame.origin.x * fromSx
  71.  
  72. fromView.frame.origin.y = y
  73. }, completion: { _ in
  74. transitionContext.completeTransition(true)
  75. })
  76. } else {
  77. let fromView = fromViewController.view
  78. let toView = toViewController.view
  79.  
  80. let fromSx = startFrame.width / fromView.frame.width
  81. let fromSy = startFrame.height / fromView.frame.height
  82.  
  83. transitionContext.containerView()!.addSubview(fromView)
  84.  
  85. fromView.alpha = 1
  86.  
  87. UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0, options: [], animations: {
  88.  
  89. fromView.alpha = 0
  90. fromView.transform = CGAffineTransformMakeScale(fromSx, fromSy)
  91. fromView.frame.origin.x = self.startFrame.origin.x
  92. fromView.frame.origin.y = self.startFrame.origin.y
  93.  
  94. toView.transform = CGAffineTransformIdentity
  95. toView.frame.origin = CGPoint(x: 0, y: 0)
  96. }, completion: { _ in
  97. transitionContext.completeTransition(true)
  98. })
  99. }
  100. }
  101. }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment