Skip to content

Latest commit

 

History

History
158 lines (136 loc) · 7.29 KB

File metadata and controls

158 lines (136 loc) · 7.29 KB

Usage

  1. Import Fluidable framework to your project files:
import UIKit
import Fluidable
  1. Initialize Fluidable framework in AppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      FluidableInit()
      return true
  }
}
  1. Conform to Fluidable protocol in the source view controller:
class RootViewController: UICollectionViewController, Fluidable {
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.fluidDelegate = self
  }
}
  1. Conform to FluidTransitionSourceConfigurationDelegate and FluidTransitionSourceActionDelegate protocols in the source view controller:
extension RootViewController: FluidTransitionSourceConfigurationDelegate {
  /* Implement delegate methods */
}
extension RootViewController: FluidTransitionSourceActionDelegate {
  /* Implement delegate methods */
}
  1. Conform to Fluidable protocol in the destination view controller:
class TransitionScrollViewController: TransitionBaseViewController, Fluidable {
  var fluidableTransitionDelegate: FluidViewControllerTransitioningDelegate = FluidViewControllerTransitioningDelegate()
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
        self.transitioningDelegate = self.fluidableTransitionDelegate
        self.fluidDelegate = self
  }
}
  1. Conform to FluidTransitionDestinationConfigurationDelegate and FluidTransitionDestinationActionDelegate protocols in the destination view controller:
extension TransitionScrollViewController: FluidTransitionDestinationConfigurationDelegate {
  /* Implement delegate methods */
}
extension TransitionScrollViewController: FluidTransitionDestinationActionDelegate {
  /* Implement delegate methods */
}

Custom transition using UINavigationControllerDelegate

  1. Import Fluidable framework to your project files:
import UIKit
import Fluidable
  1. Initialize Fluidable framework in AppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
      FluidableInit()
      return true
  }
}
  1. Keep a FluidNavigationControllerDelegate instance alive in the navigation controller, assign it to delegate, and conform the navigation controller to Fluidable:
class NavigationRootNavigationController: UINavigationController, Fluidable {
  let fluidNavigationDelegate = FluidNavigationControllerDelegate()

  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.delegate = self.fluidNavigationDelegate
      self.fluidDelegate = self
  }
}
  1. Conform to Fluidable protocol in the source view controller:
class NavigationScrollViewController: UIViewController, Fluidable {
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.fluidDelegate = self
  }
}
  1. Conform to FluidNavigationSourceConfigurationDelegate and FluidNavigationSourceActionDelegate protocols in the source view controller:
extension NavigationScrollViewController: FluidNavigationSourceConfigurationDelegate {
  /* Implement delegate methods */
}
extension NavigationScrollViewController: FluidNavigationSourceActionDelegate {
  /* Implement delegate methods */
}
  1. Conform to Fluidable protocol in the destination view controller:
class NavigationChildViewController: UIViewController, Fluidable {
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.fluidDelegate = self
  }
}
  1. Conform to FluidNavigationDestinationConfigurationDelegate and FluidNavigationDestinationActionDelegate protocols in the destination view controller:
extension NavigationChildViewController: FluidNavigationDestinationConfigurationDelegate {
  /* Implement delegate methods */
}
extension NavigationChildViewController: FluidNavigationDestinationActionDelegate {
  /* Implement delegate methods */
}

Resizable drawer

The FluidResizableTransitionDelegate is available only for bottom drawer presentations.

  1. Conform to FluidResizableTransitionDelegate protocol in the destination view controller:
class TransitionScrollViewController: TransitionBaseViewController, Fluidable, FluidResizable {
  required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.transitioningDelegate = self.fluidableTransitionDelegate
      self.fluidDelegate = self
      self.fluidResizableDelegate = self
  }
}

extension TransitionScrollViewController: FluidResizableTransitionDelegate {
    func transitionShouldPerformResizing() -> Bool { return true }
    func transitionMinimumMarginForResizing() -> CGFloat { return 64 }
    func transitionSnapPositionsForResizing() -> [CGFloat]? { return [0.0, 0.5, 1.0] }
    func transitionInteractiveResizeDidProgress(state: FluidProgressState, position: CGFloat, info: FluidGestureInfo) {
    }
}