VLCSidebarController.m 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*****************************************************************************
  2. * VLCSidebarController.m
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2015 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Author: Felix Paul Kühne <fkuehne # videolan.org>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. #import "VLCSidebarController.h"
  13. #import "VLCMenuTableViewController.h"
  14. #import "UIViewController+RESideMenu.h"
  15. #import "RESideMenu.h"
  16. #import "UIDevice+VLC.h"
  17. @interface VLCSidebarController()
  18. {
  19. RESideMenu *_sideMenuViewController;
  20. VLCMenuTableViewController *_menuViewController;
  21. UIViewController *_contentViewController;
  22. BOOL _menuVisible;
  23. }
  24. @end
  25. @implementation VLCSidebarController
  26. + (instancetype)sharedInstance
  27. {
  28. static VLCSidebarController *sharedInstance = nil;
  29. static dispatch_once_t pred;
  30. dispatch_once(&pred, ^{
  31. sharedInstance = [VLCSidebarController new];
  32. });
  33. return sharedInstance;
  34. }
  35. - (instancetype)init
  36. {
  37. self = [super init];
  38. if (!self)
  39. return self;
  40. _menuViewController = [[VLCMenuTableViewController alloc] initWithNibName:nil bundle:nil];
  41. if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionLeftToRight) {
  42. _sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:nil
  43. leftMenuViewController:_menuViewController
  44. rightMenuViewController:nil];
  45. } else {
  46. _sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:nil
  47. leftMenuViewController:nil
  48. rightMenuViewController:_menuViewController];
  49. }
  50. _sideMenuViewController.backgroundImage = [UIImage imageNamed:@"menu-background"];
  51. if ([[UIDevice currentDevice] speedCategory] <= 2) {
  52. _sideMenuViewController.animationDuration = 0.1f;
  53. _sideMenuViewController.parallaxEnabled = NO;
  54. _sideMenuViewController.contentViewShadowEnabled = NO;
  55. _sideMenuViewController.bouncesHorizontally = NO;
  56. }
  57. return self;
  58. }
  59. #pragma mark - VC handling
  60. - (UIViewController *)fullViewController
  61. {
  62. return _sideMenuViewController;
  63. }
  64. - (void)setContentViewController:(UIViewController *)contentViewController
  65. {
  66. contentViewController.view.backgroundColor = [UIColor VLCMenuBackgroundColor];
  67. _sideMenuViewController.contentViewController = contentViewController;
  68. }
  69. - (UIViewController *)contentViewController
  70. {
  71. return _sideMenuViewController.contentViewController;
  72. }
  73. #pragma mark - actual work
  74. - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath scrollPosition:(UITableViewScrollPosition)scrollPosition
  75. {
  76. [_menuViewController selectRowAtIndexPath:indexPath
  77. animated:NO
  78. scrollPosition:scrollPosition];
  79. }
  80. - (void)hideSidebar
  81. {
  82. _menuVisible = NO;
  83. [_sideMenuViewController hideMenuViewController];
  84. }
  85. - (void)toggleSidebar
  86. {
  87. _menuVisible = YES;
  88. if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionLeftToRight) {
  89. [_sideMenuViewController presentLeftMenuViewController];
  90. } else {
  91. [_sideMenuViewController presentRightMenuViewController];
  92. }
  93. }
  94. - (void)resizeContentView
  95. {
  96. if (_menuVisible) {
  97. [self hideSidebar];
  98. [self toggleSidebar];
  99. }
  100. }
  101. @end