Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // AnimationHelper.swift
- // TransitionPOC
- //
- // Created by Jaimin Patel on 2018-12-12.
- // Copyright © 2018 Jaimin Patel. All rights reserved.
- //
- import Foundation
- import UIKit
- import ARNTransitionAnimator
- class AnimationHelper: TransitionAnimatable{
- fileprivate weak var rootVC: ViewController!
- fileprivate weak var modalVC: CardViewController!
- var completion: ((Bool) -> Void)?
- private var miniPlayerStartFrame: CGRect = CGRect.zero
- private var containerView: UIView?
- deinit {
- print("deinit MusicPlayerTransitionAnimation")
- }
- init(rootVC: ViewController, modalVC: CardViewController) {
- self.rootVC = rootVC
- self.modalVC = modalVC
- }
- func sourceVC() -> UIViewController {
- return self.rootVC
- }
- func destVC() -> UIViewController {
- return self.modalVC
- }
- func prepareContainer(_ transitionType: TransitionType, containerView: UIView, from fromVC: UIViewController, to toVC: UIViewController) {
- self.containerView = containerView
- if transitionType.isPresenting {
- self.rootVC.view.insertSubview(self.modalVC.view, belowSubview: self.rootVC.miniView)
- } else {
- self.rootVC.view.insertSubview(self.modalVC.view, belowSubview: self.rootVC.miniView)
- }
- self.rootVC.view.setNeedsLayout()
- self.rootVC.view.layoutIfNeeded()
- self.modalVC.view.setNeedsLayout()
- self.modalVC.view.layoutIfNeeded()
- self.miniPlayerStartFrame = self.rootVC.miniView.frame
- }
- func willAnimation(_ transitionType: TransitionType, containerView: UIView) {
- if transitionType.isPresenting {
- self.rootVC.beginAppearanceTransition(true, animated: false)
- self.modalVC.view.frame.origin.y = self.rootVC.miniView.frame.origin.y + self.rootVC.miniView.frame.size.height
- } else {
- self.rootVC.beginAppearanceTransition(false, animated: false)
- self.rootVC.miniView.alpha = 1.0
- self.rootVC.miniView.frame.origin.y = -self.rootVC.miniView.bounds.size.height
- // self.rootVC.tabBarController!.tabBar.frame.origin.y = containerView.bounds.size.height
- }
- }
- func updateAnimation(_ transitionType: TransitionType, percentComplete: CGFloat) {
- if transitionType.isPresenting {
- // miniPlayerView
- let startOriginY = self.miniPlayerStartFrame.origin.y
- let endOriginY = -self.miniPlayerStartFrame.size.height
- let diff = -endOriginY + startOriginY
- // tabBar
- // let tabStartOriginY = self.tabBarStartFrame.origin.y
- // let tabEndOriginY = self.modalVC.view.frame.size.height
- // let tabDiff = tabEndOriginY - tabStartOriginY
- let playerY = startOriginY - (diff * percentComplete)
- self.rootVC.miniView.frame.origin.y = max(min(playerY, self.miniPlayerStartFrame.origin.y), endOriginY)
- self.modalVC.view.frame.origin.y = self.rootVC.miniView.frame.origin.y + self.rootVC.miniView.frame.size.height
- // let tabY = tabStartOriginY + (tabDiff * percentComplete)
- // self.rootVC.tabBarController!.tabBar.frame.origin.y = min(max(tabY, self.tabBarStartFrame.origin.y), tabEndOriginY)
- let alpha = 1.0 - (1.0 * percentComplete)
- self.rootVC.containerView.subviews.forEach { $0.alpha = alpha + 0.4 }
- // self.rootVC.containerView.alpha = alpha + 0.1
- // self.rootVC.tabBarController!.tabBar.alpha = alpha
- } else {
- // miniPlayerView
- let startOriginY = 0 - self.rootVC.miniView.bounds.size.height
- let endOriginY = self.miniPlayerStartFrame.origin.y
- let diff = -startOriginY + endOriginY
- // tabBar
- // let tabStartOriginY = self.rootVC.containerView.bounds.size.height
- // let tabEndOriginY = self.tabBarStartFrame.origin.y
- // let tabDiff = tabStartOriginY - tabEndOriginY
- self.rootVC.miniView.frame.origin.y = startOriginY + (diff * percentComplete)
- self.modalVC.view.frame.origin.y = self.rootVC.miniView.frame.origin.y + self.rootVC.miniView.frame.size.height
- // self.rootVC.tabBarController!.tabBar.frame.origin.y = tabStartOriginY - (tabDiff * (1.0 - percentComplete))
- let alpha = 1.0 * percentComplete
- self.rootVC.containerView.subviews.forEach { $0.alpha = alpha + 0.4 }
- // self.rootVC.tabBarController!.tabBar.alpha = alpha
- }
- }
- func finishAnimation(_ transitionType: TransitionType, didComplete: Bool) {
- self.rootVC.endAppearanceTransition()
- if transitionType.isPresenting {
- if didComplete {
- self.rootVC.miniView.alpha = 0.0
- self.modalVC.view.removeFromSuperview()
- self.containerView?.addSubview(self.modalVC.view)
- self.completion?(transitionType.isPresenting)
- } else {
- self.rootVC.beginAppearanceTransition(true, animated: false)
- self.rootVC.endAppearanceTransition()
- }
- } else {
- if didComplete {
- self.modalVC.view.removeFromSuperview()
- self.completion?(transitionType.isPresenting)
- } else {
- self.rootVC.miniView.alpha = 0.0
- self.modalVC.view.removeFromSuperview()
- self.containerView?.addSubview(self.modalVC.view)
- self.rootVC.beginAppearanceTransition(false, animated: false)
- self.rootVC.endAppearanceTransition()
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment