Custom transition using UIViewControllerTransitioningDelegate
- Import
Fluidableframework to your project files:
import UIKit
import Fluidable- Initialize
Fluidableframework inAppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FluidableInit()
return true
}
}- Conform to
Fluidableprotocol in the source view controller:
class RootViewController: UICollectionViewController, Fluidable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.fluidDelegate = self
}
}- Conform to
FluidTransitionSourceConfigurationDelegateandFluidTransitionSourceActionDelegateprotocols in the source view controller:
extension RootViewController: FluidTransitionSourceConfigurationDelegate {
/* Implement delegate methods */
}
extension RootViewController: FluidTransitionSourceActionDelegate {
/* Implement delegate methods */
}- Conform to
Fluidableprotocol 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
}
}- Conform to
FluidTransitionDestinationConfigurationDelegateandFluidTransitionDestinationActionDelegateprotocols in the destination view controller:
extension TransitionScrollViewController: FluidTransitionDestinationConfigurationDelegate {
/* Implement delegate methods */
}
extension TransitionScrollViewController: FluidTransitionDestinationActionDelegate {
/* Implement delegate methods */
}Custom transition using UINavigationControllerDelegate
- Import
Fluidableframework to your project files:
import UIKit
import Fluidable- Initialize
Fluidableframework inAppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FluidableInit()
return true
}
}- Keep a
FluidNavigationControllerDelegateinstance alive in the navigation controller, assign it todelegate, and conform the navigation controller toFluidable:
class NavigationRootNavigationController: UINavigationController, Fluidable {
let fluidNavigationDelegate = FluidNavigationControllerDelegate()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self.fluidNavigationDelegate
self.fluidDelegate = self
}
}- Conform to
Fluidableprotocol in the source view controller:
class NavigationScrollViewController: UIViewController, Fluidable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.fluidDelegate = self
}
}- Conform to
FluidNavigationSourceConfigurationDelegateandFluidNavigationSourceActionDelegateprotocols in the source view controller:
extension NavigationScrollViewController: FluidNavigationSourceConfigurationDelegate {
/* Implement delegate methods */
}
extension NavigationScrollViewController: FluidNavigationSourceActionDelegate {
/* Implement delegate methods */
}- Conform to
Fluidableprotocol in the destination view controller:
class NavigationChildViewController: UIViewController, Fluidable {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.fluidDelegate = self
}
}- Conform to
FluidNavigationDestinationConfigurationDelegateandFluidNavigationDestinationActionDelegateprotocols in the destination view controller:
extension NavigationChildViewController: FluidNavigationDestinationConfigurationDelegate {
/* Implement delegate methods */
}
extension NavigationChildViewController: FluidNavigationDestinationActionDelegate {
/* Implement delegate methods */
}The FluidResizableTransitionDelegate is available only for bottom drawer presentations.
- Conform to
FluidResizableTransitionDelegateprotocol 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) {
}
}