下載地址:https://github.com/romaonthego/RESideMenu 效果如下:官方案例 自己的實現效果 具體代碼下: AppDelegate.m文件中 - (BOOL)application:(UIApplication *)application didFinishLau ...
下載地址:https://github.com/romaonthego/RESideMenu
效果如下:官方案例
自己的實現效果
具體代碼下:
AppDelegate.m文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法
DEMOLeftMenuViewController *leftMenuViewController = [[DEMOLeftMenuViewController alloc] init]; RESideMenu *sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:[[MainTabBarController alloc]init] leftMenuViewController:leftMenuViewController rightMenuViewController:[UINavigationController new]]; sideMenuViewController.backgroundImage = [UIImage imageNamed:@"005.jpg"]; sideMenuViewController.menuPreferredStatusBarStyle = 1; // UIStatusBarStyleLightContent sideMenuViewController.delegate = self; // sideMenuViewController.parallaxContentMaximumRelativeValue=100; // sideMenuViewController.bouncesHorizontally=YES; sideMenuViewController.contentViewShadowColor = [UIColor blackColor]; sideMenuViewController.contentViewShadowOffset = CGSizeMake(0, 0); sideMenuViewController.contentViewShadowOpacity = 0.6; sideMenuViewController.contentViewShadowRadius = 12; // sideMenuViewController.contentViewShadowEnabled = YES; // sideMenuViewController.panFromEdge=NO; self.window.rootViewController = sideMenuViewController;
左側的控制器DEMOLeftMenuViewController.h和DEMOLeftMenuViewController.m
#import <UIKit/UIKit.h> #import "RESideMenu.h" @interface DEMOLeftMenuViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, RESideMenuDelegate> @end
#import "DEMOLeftMenuViewController.h" #import "HomeViewController.h" #import "UIViewController+RESideMenu.h" #import "LoginViewController.h" #import "resigeViewController.h" @interface DEMOLeftMenuViewController () @property (strong, readwrite, nonatomic) UITableView *tableView; @end @implementation DEMOLeftMenuViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.title=@"登陸"; self.tableView = ({ UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - 54 * 5) / 2.0f, self.view.frame.size.width, 54 * 5) style:UITableViewStylePlain]; tableView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth; tableView.delegate = self; tableView.dataSource = self; tableView.opaque = NO; tableView.backgroundColor = [UIColor clearColor]; tableView.backgroundView = nil; tableView.separatorStyle = UITableViewCellSeparatorStyleNone; tableView.bounces = NO; tableView.scrollsToTop = NO; tableView; }); [self.view addSubview:self.tableView]; } #pragma mark - #pragma mark UITableView Delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; switch (indexPath.row) { case 0: [self presentViewController:[[UINavigationController alloc] initWithRootViewController:[[LoginViewController alloc] init]] animated:YES completion:nil]; break; case 1: [self presentViewController:[[UINavigationController alloc] initWithRootViewController:[[resigeViewController alloc] init]] animated:YES completion:nil]; break; default: break; } } #pragma mark - #pragma mark UITableView Datasource - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 54; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex { return 5; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; cell.backgroundColor = [UIColor clearColor]; cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:21]; cell.textLabel.textColor = [UIColor whiteColor]; cell.textLabel.highlightedTextColor = [UIColor lightGrayColor]; cell.selectedBackgroundView = [[UIView alloc] init]; } NSArray *titles = @[@"Home", @"Calendar", @"Profile", @"Settings", @"Log Out"]; NSArray *images = @[@"IconHome", @"IconCalendar", @"IconProfile", @"IconSettings", @"IconEmpty"]; cell.textLabel.text = titles[indexPath.row]; cell.imageView.image = [UIImage imageNamed:images[indexPath.row]]; return cell; } @end
主頁HomeViewController.h和HomeViewController.m實現側滑的關鍵代碼
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"個人中心" style:UIBarButtonItemStylePlain target:self action:@selector(presentLeftMenuViewControl
這個第三番可以實現很多效果
總結
優點:
1.裡面的文件較少,不需要使用cocoapods即可運行。
2.裡面自定義API也比較多,可以設置變小的抽屜效果或者不變小。
3.裡面有兩個事常式序,一個是純手碼,一個是Storyboard得。可見作者也非常喜歡IB開發,此框架用IB開發應該可以完美相容。
4.可以使用手勢拖來拖去。
5.項目里各個文件不需要繼承,導入頭文件就行。
缺點:
1.左邊顯示的菜單可選項是固定的幾個button,暫時想把左邊換成tableView還不知道可不可行。
2.不能實現狀態欄右移。
3.暫時沒找到兩邊控制器的占比怎麼自定義。