123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- //
- // SideMenuPresentStyle.swift
- // SideMenu
- //
- // Created by Jon Kent on 7/2/19.
- //
- import UIKit
- @objcMembers
- open class SideMenuPresentationStyle: InitializableClass {
- /// Background color behind the views and status bar color
- open var backgroundColor: UIColor = .black
- /// The starting alpha value of the menu before it appears
- open var menuStartAlpha: CGFloat = 1
- /// Whether or not the menu is on top. If false, the presenting view is on top. Shadows are applied to the view on top.
- open var menuOnTop: Bool = false
- /// The amount the menu is translated along the x-axis. Zero is stationary, negative values are off-screen, positive values are on screen.
- open var menuTranslateFactor: CGFloat = 0
- /// The amount the menu is scaled. Less than one shrinks the view, larger than one grows the view.
- open var menuScaleFactor: CGFloat = 1
- /// The color of the shadow applied to the top most view.
- open var onTopShadowColor: UIColor = .black
- /// The radius of the shadow applied to the top most view.
- open var onTopShadowRadius: CGFloat = 5
- /// The opacity of the shadow applied to the top most view.
- open var onTopShadowOpacity: Float = 0
- /// The offset of the shadow applied to the top most view.
- open var onTopShadowOffset: CGSize = .zero
- /// The ending alpha of the presenting view when the menu is fully displayed.
- open var presentingEndAlpha: CGFloat = 1
- /// The amount the presenting view is translated along the x-axis. Zero is stationary, negative values are off-screen, positive values are on screen.
- open var presentingTranslateFactor: CGFloat = 0
- /// The amount the presenting view is scaled. Less than one shrinks the view, larger than one grows the view.
- open var presentingScaleFactor: CGFloat = 1
- /// The strength of the parallax effect on the presenting view once the menu is displayed.
- open var presentingParallaxStrength: CGSize = .zero
- required public init() {}
- /// This method is called just before the presentation transition begins. Use this to setup any animations. The super method does not need to be called.
- open func presentationTransitionWillBegin(to presentedViewController: UIViewController, from presentingViewController: UIViewController) {}
- /// This method is called during the presentation animation. Use this to animate anything alongside the menu animation. The super method does not need to be called.
- open func presentationTransition(to presentedViewController: UIViewController, from presentingViewController: UIViewController) {}
- /// This method is called when the presentation transition ends. Use this to finish any animations. The super method does not need to be called.
- open func presentationTransitionDidEnd(to presentedViewController: UIViewController, from presentingViewController: UIViewController, _ completed: Bool) {}
- /// This method is called just before the dismissal transition begins. Use this to setup any animations. The super method does not need to be called.
- open func dismissalTransitionWillBegin(to presentedViewController: UIViewController, from presentingViewController: UIViewController) {}
- /// This method is called during the dismissal animation. Use this to animate anything alongside the menu animation. The super method does not need to be called.
- open func dismissalTransition(to presentedViewController: UIViewController, from presentingViewController: UIViewController) {}
- /// This method is called when the dismissal transition ends. Use this to finish any animations. The super method does not need to be called.
- open func dismissalTransitionDidEnd(to presentedViewController: UIViewController, from presentingViewController: UIViewController, _ completed: Bool) {}
- }
- public extension SideMenuPresentationStyle {
- /// Menu slides in over the existing view.
- static var menuSlideIn: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.menuOnTop = true
- $0.menuTranslateFactor = -1
- }
- }
- /// The existing view slides out to reveal the menu underneath.
- static var viewSlideOut: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.presentingTranslateFactor = 1
- }
- }
- /// The existing view slides out while the menu slides in.
- static var viewSlideOutMenuIn: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.menuTranslateFactor = -1
- $0.presentingTranslateFactor = 1
- }
- }
- /// The menu dissolves in over the existing view.
- static var menuDissolveIn: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.menuStartAlpha = 0
- $0.menuOnTop = true
- }
- }
- /// The existing view slides out while the menu partially slides in.
- static var viewSlideOutMenuPartialIn: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.menuTranslateFactor = -0.5
- $0.presentingTranslateFactor = 1
- }
- }
- /// The existing view slides out while the menu slides out from under it.
- static var viewSlideOutMenuOut: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.menuTranslateFactor = 1
- $0.presentingTranslateFactor = 1
- }
- }
- /// The existing view slides out while the menu partially slides out from under it.
- static var viewSlideOutMenuPartialOut: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.menuTranslateFactor = 0.5
- $0.presentingTranslateFactor = 1
- }
- }
- /// The existing view slides out and shrinks to reveal the menu underneath.
- static var viewSlideOutMenuZoom: SideMenuPresentationStyle {
- return SideMenuPresentationStyle {
- $0.presentingTranslateFactor = 1
- $0.menuScaleFactor = 0.95
- $0.menuOnTop = true
- }
- }
- }
|