Guest User

Untitled

a guest
Dec 13th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.93 KB | None | 0 0
  1. //
  2. // AnimationHelper.swift
  3. // TransitionPOC
  4. //
  5. // Created by Jaimin Patel on 2018-12-12.
  6. // Copyright © 2018 Jaimin Patel. All rights reserved.
  7. //
  8.  
  9. import Foundation
  10. import UIKit
  11. import ARNTransitionAnimator
  12.  
  13. class AnimationHelper: TransitionAnimatable{
  14.  
  15. fileprivate weak var rootVC: ViewController!
  16. fileprivate weak var modalVC: CardViewController!
  17.  
  18. var completion: ((Bool) -> Void)?
  19.  
  20. private var miniPlayerStartFrame: CGRect = CGRect.zero
  21.  
  22. private var containerView: UIView?
  23.  
  24. deinit {
  25. print("deinit MusicPlayerTransitionAnimation")
  26. }
  27.  
  28. init(rootVC: ViewController, modalVC: CardViewController) {
  29. self.rootVC = rootVC
  30. self.modalVC = modalVC
  31. }
  32.  
  33. func sourceVC() -> UIViewController {
  34. return self.rootVC
  35. }
  36.  
  37. func destVC() -> UIViewController {
  38. return self.modalVC
  39. }
  40.  
  41. func prepareContainer(_ transitionType: TransitionType, containerView: UIView, from fromVC: UIViewController, to toVC: UIViewController) {
  42. self.containerView = containerView
  43. if transitionType.isPresenting {
  44. self.rootVC.view.insertSubview(self.modalVC.view, belowSubview: self.rootVC.miniView)
  45. } else {
  46. self.rootVC.view.insertSubview(self.modalVC.view, belowSubview: self.rootVC.miniView)
  47. }
  48. self.rootVC.view.setNeedsLayout()
  49. self.rootVC.view.layoutIfNeeded()
  50. self.modalVC.view.setNeedsLayout()
  51. self.modalVC.view.layoutIfNeeded()
  52.  
  53. self.miniPlayerStartFrame = self.rootVC.miniView.frame
  54. }
  55.  
  56. func willAnimation(_ transitionType: TransitionType, containerView: UIView) {
  57. if transitionType.isPresenting {
  58. self.rootVC.beginAppearanceTransition(true, animated: false)
  59.  
  60. self.modalVC.view.frame.origin.y = self.rootVC.miniView.frame.origin.y + self.rootVC.miniView.frame.size.height
  61. } else {
  62. self.rootVC.beginAppearanceTransition(false, animated: false)
  63.  
  64. self.rootVC.miniView.alpha = 1.0
  65. self.rootVC.miniView.frame.origin.y = -self.rootVC.miniView.bounds.size.height
  66. // self.rootVC.tabBarController!.tabBar.frame.origin.y = containerView.bounds.size.height
  67. }
  68. }
  69.  
  70. func updateAnimation(_ transitionType: TransitionType, percentComplete: CGFloat) {
  71. if transitionType.isPresenting {
  72. // miniPlayerView
  73. let startOriginY = self.miniPlayerStartFrame.origin.y
  74. let endOriginY = -self.miniPlayerStartFrame.size.height
  75. let diff = -endOriginY + startOriginY
  76. // tabBar
  77. // let tabStartOriginY = self.tabBarStartFrame.origin.y
  78. // let tabEndOriginY = self.modalVC.view.frame.size.height
  79. // let tabDiff = tabEndOriginY - tabStartOriginY
  80.  
  81. let playerY = startOriginY - (diff * percentComplete)
  82. self.rootVC.miniView.frame.origin.y = max(min(playerY, self.miniPlayerStartFrame.origin.y), endOriginY)
  83.  
  84. self.modalVC.view.frame.origin.y = self.rootVC.miniView.frame.origin.y + self.rootVC.miniView.frame.size.height
  85. // let tabY = tabStartOriginY + (tabDiff * percentComplete)
  86. // self.rootVC.tabBarController!.tabBar.frame.origin.y = min(max(tabY, self.tabBarStartFrame.origin.y), tabEndOriginY)
  87.  
  88. let alpha = 1.0 - (1.0 * percentComplete)
  89. self.rootVC.containerView.subviews.forEach { $0.alpha = alpha + 0.4 }
  90. // self.rootVC.containerView.alpha = alpha + 0.1
  91. // self.rootVC.tabBarController!.tabBar.alpha = alpha
  92. } else {
  93. // miniPlayerView
  94. let startOriginY = 0 - self.rootVC.miniView.bounds.size.height
  95. let endOriginY = self.miniPlayerStartFrame.origin.y
  96. let diff = -startOriginY + endOriginY
  97. // tabBar
  98. // let tabStartOriginY = self.rootVC.containerView.bounds.size.height
  99. // let tabEndOriginY = self.tabBarStartFrame.origin.y
  100. // let tabDiff = tabStartOriginY - tabEndOriginY
  101.  
  102. self.rootVC.miniView.frame.origin.y = startOriginY + (diff * percentComplete)
  103. self.modalVC.view.frame.origin.y = self.rootVC.miniView.frame.origin.y + self.rootVC.miniView.frame.size.height
  104.  
  105. // self.rootVC.tabBarController!.tabBar.frame.origin.y = tabStartOriginY - (tabDiff * (1.0 - percentComplete))
  106.  
  107. let alpha = 1.0 * percentComplete
  108. self.rootVC.containerView.subviews.forEach { $0.alpha = alpha + 0.4 }
  109. // self.rootVC.tabBarController!.tabBar.alpha = alpha
  110. }
  111. }
  112.  
  113. func finishAnimation(_ transitionType: TransitionType, didComplete: Bool) {
  114. self.rootVC.endAppearanceTransition()
  115.  
  116. if transitionType.isPresenting {
  117. if didComplete {
  118. self.rootVC.miniView.alpha = 0.0
  119. self.modalVC.view.removeFromSuperview()
  120. self.containerView?.addSubview(self.modalVC.view)
  121.  
  122. self.completion?(transitionType.isPresenting)
  123. } else {
  124. self.rootVC.beginAppearanceTransition(true, animated: false)
  125. self.rootVC.endAppearanceTransition()
  126. }
  127. } else {
  128. if didComplete {
  129. self.modalVC.view.removeFromSuperview()
  130.  
  131. self.completion?(transitionType.isPresenting)
  132. } else {
  133. self.rootVC.miniView.alpha = 0.0
  134.  
  135. self.modalVC.view.removeFromSuperview()
  136. self.containerView?.addSubview(self.modalVC.view)
  137.  
  138. self.rootVC.beginAppearanceTransition(false, animated: false)
  139. self.rootVC.endAppearanceTransition()
  140. }
  141. }
  142. }
  143.  
  144.  
  145.  
  146. }
Add Comment
Please, Sign In to add comment