You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

741 lines
28 KiB

  1. # LGSideMenuController
  2. iOS view controller, shows left and right views by pressing button or gesture.
  3. [![Platform](https://img.shields.io/cocoapods/p/LGSideMenuController.svg)](https://github.com/Friend-LGA/LGSideMenuController)
  4. [![CocoaPods](https://img.shields.io/cocoapods/v/LGSideMenuController.svg)](http://cocoadocs.org/docsets/LGSideMenuController)
  5. [![Carthage](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg)](https://github.com/Friend-LGA/LGSideMenuController)
  6. [![License](http://img.shields.io/cocoapods/l/LGSideMenuController.svg)](https://raw.githubusercontent.com/Friend-LGA/LGSideMenuController/master/LICENSE)
  7. ## Preview
  8. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/Preview1.gif" width="285"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/1.png" width="286"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/2.png" width="286"/>
  9. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/Preview2.gif" width="285"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/3.png" width="286"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/4.png" width="286"/>
  10. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/Preview3.gif" width="285"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/5.png" width="286"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/34a53dd6dee506f5cac7e99f67d2f92720f2d24c/LGSideMenuController/6.png" width="286"/>
  11. ## Installation
  12. | LGSideMenuController version | iOS version |
  13. |------------------------------|-------------|
  14. | <= 1.0.10 | >= 6.0 |
  15. | >= 1.1.0 | >= 8.0 |
  16. ### With source code
  17. [Download repository](https://github.com/Friend-LGA/LGSideMenuController/archive/master.zip), then add [LGSideMenuController directory](https://github.com/Friend-LGA/LGSideMenuController/blob/master/LGSideMenuController/) to your project.
  18. Then import header files where you need to use the library
  19. ##### Objective-C
  20. ```objective-c
  21. #import "LGSideMenuController.h"
  22. #import "UIViewController+LGSideMenuController.h"
  23. ```
  24. ##### Swift
  25. For swift you need to create [bridging header](https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html)
  26. ```objective-c
  27. // BridgingHeader.h
  28. #import "LGSideMenuController.h"
  29. #import "UIViewController+LGSideMenuController.h"
  30. ```
  31. ### With CocoaPods
  32. CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. To install with cocoaPods, follow the "Get Started" section on [CocoaPods](https://cocoapods.org/).
  33. #### Podfile
  34. ```ruby
  35. platform :ios, '8.0'
  36. use_frameworks!
  37. pod 'LGSideMenuController'
  38. ```
  39. Then import framework where you need to use the library
  40. ##### Objective-C
  41. ```objective-c
  42. #import <LGSideMenuController/LGSideMenuController.h>
  43. #import <LGSideMenuController/UIViewController+LGSideMenuController.h>
  44. // OR
  45. @import LGSideMenuController;
  46. // OR
  47. @import LGSideMenuController.LGSideMenuController;
  48. @import LGSideMenuController.UIViewController_LGSideMenuController;
  49. ```
  50. ##### Swift
  51. ```swift
  52. import LGSideMenuController
  53. // OR
  54. import LGSideMenuController.LGSideMenuController
  55. import LGSideMenuController.UIViewController_LGSideMenuController
  56. ```
  57. ### With Carthage
  58. Carthage is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods. To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage/).
  59. #### Cartfile
  60. ```ruby
  61. github "Friend-LGA/LGSideMenuController"
  62. ```
  63. Then import framework where you need to use the library
  64. ##### Objective-C
  65. ```objective-c
  66. #import <LGSideMenuController/LGSideMenuController.h>
  67. #import <LGSideMenuController/UIViewController+LGSideMenuController.h>
  68. // OR
  69. @import LGSideMenuController;
  70. // OR
  71. @import LGSideMenuController.LGSideMenuController;
  72. @import LGSideMenuController.UIViewController_LGSideMenuController;
  73. ```
  74. ##### Swift
  75. ```swift
  76. import LGSideMenuController
  77. // OR
  78. import LGSideMenuController.LGSideMenuController
  79. import LGSideMenuController.UIViewController_LGSideMenuController
  80. ```
  81. ## Usage
  82. ### Initialization
  83. You can use view controllers or views to initialize LGSideMenuController:
  84. ##### Objective-C
  85. ```objective-c
  86. - (nonnull instancetype)initWithRootViewController:(nullable UIViewController *)rootViewController;
  87. - (nonnull instancetype)initWithRootViewController:(nullable UIViewController *)rootViewController
  88. leftViewController:(nullable UIViewController *)leftViewController
  89. rightViewController:(nullable UIViewController *)rightViewController;
  90. - (nonnull instancetype)initWithRootView:(nullable UIView *)rootView;
  91. - (nonnull instancetype)initWithRootView:(nullable UIView *)rootView
  92. leftView:(nullable UIView *)leftView
  93. rightView:(nullable UIView *)rightView;
  94. ```
  95. ##### Swift
  96. ```swift
  97. public init(rootViewController: UIViewController?)
  98. public init(rootViewController: UIViewController?,
  99. leftViewController: UIViewController?,
  100. rightViewController: UIViewController?)
  101. public init(rootView: UIView?)
  102. public init(rootView: UIView?,
  103. leftView: UIView?,
  104. rightView: UIView?)
  105. ```
  106. ### Setup
  107. To set or to change root, left or right view controllers or views, call:
  108. ```swift
  109. sideMenuController.rootViewController = rootViewController
  110. sideMenuController.leftViewController = leftViewController
  111. sideMenuController.rightViewController = rightViewController
  112. sideMenuController.rootView = rootView
  113. sideMenuController.leftView = leftView
  114. sideMenuController.rightView = rightView
  115. ```
  116. If you set, for example, `sideMenuController.rootViewController = rootViewController`,
  117. then `sideMenuController.rootView == rootViewController.view`.
  118. If you have, for example, `sideMenuController.rootViewController != nil` and you set `sideMenuController.rootView = rootView`, then `sideMenuController.rootViewController == nil`.
  119. ### Quick Example
  120. #### Programmatically
  121. ##### Objective-C
  122. ```objective-c
  123. UIViewController *rootViewController = [UIViewController new];
  124. UITableViewController *leftViewController = [UITableViewController new];
  125. UITableViewController *rightViewController = [UITableViewController new];
  126. UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
  127. LGSideMenuController *sideMenuController = [LGSideMenuController sideMenuControllerWithRootViewController:navigationController
  128. leftViewController:leftViewController
  129. rightViewController:rightViewController];
  130. sideMenuController.leftViewWidth = 250.0;
  131. sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyleScaleFromBig;
  132. sideMenuController.rightViewWidth = 100.0;
  133. sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyleSlideBelow;
  134. ```
  135. ##### Swift
  136. ```swift
  137. let rootViewController = UIViewController()
  138. let leftViewController = UITableViewController()
  139. let rightViewController = UITableViewController()
  140. let navigationController = UINavigationController(rootViewController: rootViewController)
  141. let sideMenuController = LGSideMenuController(rootViewController: navigationController,
  142. leftViewController: leftViewController,
  143. rightViewController: rightViewController)
  144. sideMenuController.leftViewWidth = 250.0;
  145. sideMenuController.leftViewPresentationStyle = .scaleFromBig;
  146. sideMenuController.rightViewWidth = 100.0;
  147. sideMenuController.leftViewPresentationStyle = .slideBelow;
  148. ```
  149. #### With storyboard
  150. 1. Create instance of LGSideMenuController
  151. 2. Create some root view controller (for example UINavigationController)
  152. 3. Create some left view controller (for example UITableViewController)
  153. 4. Create some right view controller (for example UITableViewController)
  154. 5. Now you need to connect them all using segues of class `LGSideMenuSegue` and with identifiers: `root`, `left`, `right`.
  155. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Root1.png" height="300"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Root2.png" height="300"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Root3.png" height="300"/>
  156. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Left1.png" height="300"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Left2.png" height="300"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Left3.png" height="300"/>
  157. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Right1.png" height="300"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Right2.png" height="300"/> <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/dcb1aa9f4ce0fc1e7ded0ab595f6d346b1698e43/LGSideMenuController/Storyboard_Instructions/Segues/Right3.png" height="300"/>
  158. 6. You can change `leftViewWidth`, `leftViewPresentationStyle`, `rightViewWidth` and `rightViewPresentationStyle` inside LGSideMenuController's attributes inspector. There you can also find all other properties.
  159. <img src="https://raw.githubusercontent.com/Friend-LGA/ReadmeFiles/d46bbba932f09fc91d91ada65d7060abec2be807/LGSideMenuController/Storyboard_Instructions/Properties.png" width="280"/>
  160. For better examples check [demo projects](https://github.com/Friend-LGA/LGSideMenuController/tree/master/Demo).
  161. ### Blur
  162. You can use UIBlurEffect with next properties:
  163. ```objective-c
  164. UIBlurEffect *leftViewBackgroundBlurEffect;
  165. UIBlurEffect *rightViewBackgroundBlurEffect;
  166. UIBlurEffect *rootViewCoverBlurEffectForLeftView;
  167. UIBlurEffect *rootViewCoverBlurEffectForRightView;
  168. UIBlurEffect *leftViewCoverBlurEffect;
  169. UIBlurEffect *rightViewCoverBlurEffect;
  170. ```
  171. For example:
  172. ##### Objective-C
  173. ```objective-c
  174. sideMenuController.leftViewBackgroundBlurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleRegular];
  175. ```
  176. ##### Swift
  177. ```swift
  178. sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular)
  179. ```
  180. If you want to change color of blurred view, use:
  181. ```objective-c
  182. UIColor *leftViewBackgroundColor;
  183. UIColor *rightViewBackgroundColor;
  184. UIColor *rootViewCoverColorForLeftView;
  185. UIColor *rootViewCoverColorForRightView;
  186. UIColor *leftViewCoverColor;
  187. UIColor *rightViewCoverColor;
  188. ```
  189. For example:
  190. ##### Objective-C
  191. ```objective-c
  192. sideMenuController.leftViewBackgroundColor = [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:0.1];
  193. ```
  194. ##### Swift
  195. ```swift
  196. sideMenuController.leftViewBackgroundColor = UIColor(red: 0.0, green: 0.5, blue: 1.0, alpha: 0.1)
  197. ```
  198. If you want to change intensity of blurred view, use:
  199. ```objective-c
  200. CGFloat leftViewBackgroundAlpha;
  201. CGFloat rightViewBackgroundAlpha;
  202. CGFloat rootViewCoverAlphaForLeftView;
  203. CGFloat rootViewCoverAlphaForRightView;
  204. CGFloat CGFloatleftViewCoverAlpha;
  205. CGFloat rightViewCoverAlpha;
  206. ```
  207. For example:
  208. ```objective-c
  209. sideMenuController.leftViewBackgroundAlpha = 0.9;
  210. ```
  211. ### Status Bar
  212. You can't use `prefersStatusBarHidden, preferredStatusBarStyle, preferredStatusBarUpdateAnimation`,
  213. instead you need to override all these methods for each controller separated, or use properties of sideMenuController:
  214. ```objective-c
  215. BOOL rootViewStatusBarHidden;
  216. UIStatusBarStyle rootViewStatusBarStyle;
  217. UIStatusBarAnimation rootViewStatusBarUpdateAnimation;
  218. BOOL leftViewStatusBarHidden;
  219. UIStatusBarStyle leftViewStatusBarStyle;
  220. UIStatusBarAnimation leftViewStatusBarUpdateAnimation;
  221. BOOL rightViewStatusBarHidden;
  222. UIStatusBarStyle rightViewStatusBarStyle;
  223. UIStatusBarAnimation rightViewStatusBarUpdateAnimation;
  224. ```
  225. And these properties have greater priority then overridden `prefersStatusBarHidden, preferredStatusBarStyle, preferredStatusBarUpdateAnimation`.
  226. For example, you had sideMenuController with rootViewController, leftViewController and rightViewController.
  227. For rootViewController, you can override it's default methods or use sideMenuController's properties:
  228. ##### Objective-C
  229. ```objective-c
  230. // In RootViewController.m
  231. - (BOOL)prefersStatusBarHidden {
  232. return NO;
  233. }
  234. - (UIStatusBarStyle)preferredStatusBarStyle {
  235. return UIStatusBarStyleDefault;
  236. }
  237. - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
  238. return UIStatusBarAnimationNone;
  239. }
  240. // OR in SideMenuController.m
  241. self.rootViewStatusBarHidden = NO;
  242. self.rootViewStatusBarStyle = UIStatusBarStyleDefault;
  243. self.rootViewStatusBarUpdateAnimation = UIStatusBarAnimationNone;
  244. // OR
  245. - (BOOL)isRootViewStatusBarHidden {
  246. return NO;
  247. }
  248. - (UIStatusBarStyle)rootViewStatusBarStyle {
  249. return UIStatusBarStyleDefault;
  250. }
  251. - (UIStatusBarAnimation)rootViewStatusBarUpdateAnimation {
  252. return UIStatusBarAnimationNone;
  253. }
  254. ```
  255. ##### Swift
  256. ```swift
  257. // In RootViewController.swift
  258. override var prefersStatusBarHidden : Bool {
  259. return false
  260. }
  261. override var preferredStatusBarStyle : UIStatusBarStyle {
  262. return .default
  263. }
  264. override var preferredStatusBarUpdateAnimation : UIStatusBarAnimation {
  265. return .none
  266. }
  267. // OR in SideMenuController.swift
  268. rootViewStatusBarHidden = false
  269. rootViewStatusBarStyle = .default
  270. rootViewStatusBarUpdateAnimation = .none
  271. // OR
  272. override var isRootViewStatusBarHidden : Bool {
  273. get { return false }
  274. set { super.isRootViewStatusBarHidden = newValue }
  275. }
  276. override var rootViewStatusBarStyle : UIStatusBarStyle {
  277. get { return .default }
  278. set { super.rootViewStatusBarStyle = newValue }
  279. }
  280. override var rootViewStatusBarUpdateAnimation : UIStatusBarAnimation {
  281. get { return .none }
  282. set { super.rootViewStatusBarUpdateAnimation = newValue }
  283. }
  284. ```
  285. For `leftViewController and rightViewController` principe the same, but lets look at situation, when animations are different for each viewController.
  286. * When side views are hidden, then `statusBarUpdateAnimation == rootViewController.statusBarUpdateAnimation`.
  287. * When left view is going to show, then `statusBarUpdateAnimation == leftViewController.statusBarUpdateAnimation`.
  288. * When left view is going to hide and root view is going to show, then `statusBarUpdateAnimation == rootViewController.statusBarUpdateAnimation`.
  289. But may be you want to `statusBarUpdateAnimation == leftViewController.statusBarUpdateAnimation` also when left view is going to hide.
  290. Then you can do next:
  291. ##### Objective-C
  292. ```objective-c
  293. // In RootViewController.m
  294. - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
  295. if (self.sideMenuController.isLeftViewVisible) {
  296. return UIStatusBarAnimationFade;
  297. }
  298. else if (self.sideMenuController.isRightViewVisible) {
  299. return UIStatusBarAnimationSlide;
  300. }
  301. else {
  302. return UIStatusBarAnimationNone;
  303. }
  304. }
  305. // OR in SideMenuController.m
  306. - (UIStatusBarAnimation)rootViewStatusBarUpdateAnimation {
  307. if (self.isLeftViewVisible) {
  308. return UIStatusBarAnimationFade;
  309. }
  310. else if (self.isRightViewVisible) {
  311. return UIStatusBarAnimationSlide;
  312. }
  313. else {
  314. return UIStatusBarAnimationNone;
  315. }
  316. }
  317. ```
  318. ##### Swift
  319. ```swift
  320. // In RootViewController.swift
  321. override var preferredStatusBarUpdateAnimation : UIStatusBarAnimation {
  322. if sideMenuController.isLeftViewVisible {
  323. return UIStatusBarAnimationFade
  324. }
  325. else if sideMenuController.isRightViewVisible {
  326. return UIStatusBarAnimationSlide
  327. }
  328. else {
  329. return UIStatusBarAnimationNone
  330. }
  331. }
  332. // OR in SideMenuController.swift
  333. override var rootViewStatusBarUpdateAnimation : UIStatusBarAnimation {
  334. get {
  335. if isLeftViewVisible {
  336. return UIStatusBarAnimationFade
  337. }
  338. else if isRightViewVisible {
  339. return UIStatusBarAnimationSlide
  340. }
  341. else {
  342. return UIStatusBarAnimationNone
  343. }
  344. }
  345. set { super.rootViewStatusBarUpdateAnimation = newValue }
  346. }
  347. ```
  348. ### Always visible options
  349. Sometimes, for example on iPad, you need to have toggleable side menu on portrait orientation and always visible side menu on landscape orientation
  350. You can get it with properties:
  351. ```objective-c
  352. LGSideMenuAlwaysVisibleOptions leftViewAlwaysVisibleOptions;
  353. LGSideMenuAlwaysVisibleOptions rightViewAlwaysVisibleOptions;
  354. ```
  355. LGSideMenuAlwaysVisibleOptions has values:
  356. ```
  357. LGSideMenuAlwaysVisibleOnNone
  358. LGSideMenuAlwaysVisibleOnLandscape
  359. LGSideMenuAlwaysVisibleOnPortrait
  360. LGSideMenuAlwaysVisibleOnPad
  361. LGSideMenuAlwaysVisibleOnPhone
  362. LGSideMenuAlwaysVisibleOnPadLandscape
  363. LGSideMenuAlwaysVisibleOnPadPortrait
  364. LGSideMenuAlwaysVisibleOnPhoneLandscape
  365. LGSideMenuAlwaysVisibleOnPhonePortrait
  366. LGSideMenuAlwaysVisibleOnAll
  367. ```
  368. You can choose multiple values like this:
  369. ##### Objective-C
  370. ```objective-c
  371. sideMenuController.leftViewAlwaysVisibleOptions = LGSideMenuAlwaysVisibleOnPadLandscape|LGSideMenuAlwaysVisibleOnPhoneLandscape;
  372. ```
  373. ##### Swift
  374. ```swift
  375. sideMenuController.leftViewAlwaysVisibleOptions = [.onPadLandscape, .onPhoneLandscape]
  376. ```
  377. ### NavigationController's back gesture
  378. Back gesture for UINavigationController has greater priority then swipe gesture for LGSideMenuController.
  379. But if you want, you can disable `interactivePopGestureRecognizer`, or change `swipeGestureArea`, or increase `leftViewSwipeGestureRange, rightViewSwipeGestureRange`.
  380. ##### Objective-C
  381. ```objective-c
  382. navigationController.interactivePopGestureRecognizer.enabled = NO;
  383. // OR
  384. sideMenuController.swipeGestureArea = LGSideMenuSwipeGestureAreaFull;
  385. // OR
  386. sideMenuController.leftViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(44.0, 88.0);
  387. sideMenuController.rightViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(88.0, 44.0);
  388. ```
  389. ##### Swift
  390. ```swift
  391. navigationController.interactivePopGestureRecognizer.isEnabled = false
  392. // OR
  393. sideMenuController.swipeGestureArea = .full
  394. // OR
  395. sideMenuController.leftViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(44.0, 88.0)
  396. sideMenuController.rightViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(88.0, 44.0)
  397. ```
  398. ### Editable Table View
  399. If you have editable table view inside sideMenuController, then it will work fine if you swipe rows not inside `swipeGestureArea` for sideMenuController.
  400. If you need more place for swipe inside table view, then you can decrease `leftViewSwipeGestureRange, rightViewSwipeGestureRange` or disable it.
  401. ##### Objective-C
  402. ```objective-c
  403. sideMenuController.swipeGestureArea = LGSideMenuSwipeGestureAreaBorders; // Default
  404. sideMenuController.leftViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(44.0, 32.0);
  405. sideMenuController.rightViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(32.0, 44.0);
  406. // OR
  407. sideMenuController.leftViewSwipeGestureEnabled = NO;
  408. sideMenuController.rightViewSwipeGestureEnabled = NO;
  409. ```
  410. ##### Swift
  411. ```swift
  412. sideMenuController.swipeGestureArea = .borders // Default
  413. sideMenuController.leftViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(44.0, 32.0)
  414. sideMenuController.rightViewSwipeGestureRange = LGSideMenuSwipeGestureRangeMake(32.0, 44.0)
  415. // OR
  416. sideMenuController.leftViewSwipeGestureEnabled = false
  417. sideMenuController.rightViewSwipeGestureEnabled = false
  418. ```
  419. ### Handle actions
  420. To handle actions you can use delegate, blocks or notifications:
  421. #### Delegate
  422. ##### Objective-C
  423. ```objective-c
  424. <LGSideMenuDelegate>
  425. @optional
  426. - (void)willShowLeftView:(nonnull UIView *)leftView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  427. - (void)didShowLeftView:(nonnull UIView *)leftView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  428. - (void)willHideLeftView:(nonnull UIView *)leftView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  429. - (void)didHideLeftView:(nonnull UIView *)leftView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  430. - (void)willShowRightView:(nonnull UIView *)rightView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  431. - (void)didShowRightView:(nonnull UIView *)rightView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  432. - (void)willHideRightView:(nonnull UIView *)rightView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  433. - (void)didHideRightView:(nonnull UIView *)rightView sideMenuController:(nonnull LGSideMenuController *)sideMenuController;
  434. - (void)showAnimationsForLeftView:(nonnull UIView *)leftView sideMenuController:(nonnull LGSideMenuController *)sideMenuController duration:(NSTimeInterval)duration;
  435. - (void)hideAnimationsForLeftView:(nonnull UIView *)leftView sideMenuController:(nonnull LGSideMenuController *)sideMenuController duration:(NSTimeInterval)duration;
  436. - (void)showAnimationsForRightView:(nonnull UIView *)rightView sideMenuController:(nonnull LGSideMenuController *)sideMenuController duration:(NSTimeInterval)duration;
  437. - (void)hideAnimationsForRightView:(nonnull UIView *)rightView sideMenuController:(nonnull LGSideMenuController *)sideMenuController duration:(NSTimeInterval)duration;
  438. ```
  439. ##### Swift
  440. ```swift
  441. <LGSideMenuDelegate>
  442. optional public func willShowLeftView(_ leftView: UIView, sideMenuController: LGSideMenuController)
  443. optional public func didShowLeftView(_ leftView: UIView, sideMenuController: LGSideMenuController)
  444. optional public func willHideLeftView(_ leftView: UIView, sideMenuController: LGSideMenuController)
  445. optional public func didHideLeftView(_ leftView: UIView, sideMenuController: LGSideMenuController)
  446. optional public func willShowRightView(_ rightView: UIView, sideMenuController: LGSideMenuController)
  447. optional public func didShowRightView(_ rightView: UIView, sideMenuController: LGSideMenuController)
  448. optional public func willHideRightView(_ rightView: UIView, sideMenuController: LGSideMenuController)
  449. optional public func didHideRightView(_ rightView: UIView, sideMenuController: LGSideMenuController)
  450. optional public func showAnimations(forLeftView leftView: UIView, sideMenuController: LGSideMenuController, duration: TimeInterval)
  451. optional public func hideAnimations(forLeftView leftView: UIView, sideMenuController: LGSideMenuController, duration: TimeInterval)
  452. optional public func showAnimations(forRightView rightView: UIView, sideMenuController: LGSideMenuController, duration: TimeInterval)
  453. optional public func hideAnimations(forRightView rightView: UIView, sideMenuController: LGSideMenuController, duration: TimeInterval)
  454. ```
  455. #### Blocks
  456. ##### Objective-C
  457. ```objective-c
  458. void(^ _Nullable willShowLeftView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  459. void(^ _Nullable didShowLeftView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  460. void(^ _Nullable willHideLeftView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  461. void(^ _Nullable didHideLeftView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  462. void(^ _Nullable willShowRightView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  463. void(^ _Nullable didShowRightView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  464. void(^ _Nullable willHideRightView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  465. void(^ _Nullable didHideRightView)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view);
  466. void(^ _Nullable showLeftViewAnimations)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view, NSTimeInterval duration);
  467. void(^ _Nullable hideLeftViewAnimations)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view, NSTimeInterval duration);
  468. void(^ _Nullable showRightViewAnimations)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view, NSTimeInterval duration);
  469. void(^ _Nullable hideRightViewAnimations)(LGSideMenuController * _Nonnull sideMenuController, UIView * _Nonnull view, NSTimeInterval duration);
  470. ```
  471. ##### Swift
  472. ```swift
  473. open var willShowLeftView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  474. open var didShowLeftView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  475. open var willHideLeftView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  476. open var didHideLeftView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  477. open var willShowRightView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  478. open var didShowRightView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  479. open var willHideRightView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  480. open var didHideRightView: ((sideMenuController: LGSideMenuController, view: UIView) -> Swift.Void)?
  481. open var showLeftViewAnimations: ((sideMenuController: LGSideMenuController, view: UIView, duration: TimeInterval) -> Swift.Void)?
  482. open var hideLeftViewAnimations: ((sideMenuController: LGSideMenuController, view: UIView, duration: TimeInterval) -> Swift.Void)?
  483. open var showRightViewAnimations: ((sideMenuController: LGSideMenuController, view: UIView, duration: TimeInterval) -> Swift.Void)?
  484. open var hideRightViewAnimations: ((sideMenuController: LGSideMenuController, view: UIView, duration: TimeInterval) -> Swift.Void)?
  485. ```
  486. #### Notifications
  487. ```
  488. LGSideMenuWillShowLeftViewNotification
  489. LGSideMenuDidShowLeftViewNotification
  490. LGSideMenuWillHideLeftViewNotification
  491. LGSideMenuDidHideLeftViewNotification
  492. LGSideMenuWillShowRightViewNotification
  493. LGSideMenuDidShowRightViewNotification
  494. LGSideMenuWillHideRightViewNotification
  495. LGSideMenuDidHideRightViewNotification
  496. LGSideMenuShowLeftViewAnimationsNotification
  497. LGSideMenuHideLeftViewAnimationsNotification
  498. LGSideMenuShowRightViewAnimationsNotification
  499. LGSideMenuHideRightViewAnimationsNotification
  500. ```
  501. ### More
  502. For more details see [header files](https://github.com/Friend-LGA/LGSideMenuController/tree/master/LGSideMenuController) and try Xcode [demo projects](https://github.com/Friend-LGA/LGSideMenuController/tree/master/Demo):
  503. * [Objective-C](https://github.com/Friend-LGA/LGSideMenuController/tree/master/Demo/Objective-C)
  504. * [Objective-C + Storyboard](https://github.com/Friend-LGA/LGSideMenuController/tree/master/Demo/Objective-C_Storyboard)
  505. * [Swift](https://github.com/Friend-LGA/LGSideMenuController/tree/master/Demo/Swift)
  506. * [Swift + Storyboard](https://github.com/Friend-LGA/LGSideMenuController/tree/master/Demo/Swift_Storyboard)
  507. ## Xamarin
  508. If you use Xamarin, look at this repository:
  509. * https://github.com/yahavgb/LGSideMenuController-Xamarin
  510. ## Frameworks
  511. If you like LGSideMenuController, check out my other useful libraries:
  512. * [LGAlertView](https://github.com/Friend-LGA/LGAlertView)
  513. Customizable implementation of UIAlertViewController, UIAlertView and UIActionSheet. All in one. You can customize every detail. Make AlertView of your dream! :)
  514. * [LGPlusButtonsView](https://github.com/Friend-LGA/LGPlusButtonsView)
  515. Customizable iOS implementation of Floating Action Button (Google Plus Button, fab).
  516. ## License
  517. LGSideMenuController is released under the MIT license. See [LICENSE](https://raw.githubusercontent.com/Friend-LGA/LGSideMenuController/master/LICENSE) for details.