左右侧滑菜单功能的实现

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

左右侧滑功能是比较常见的效果,此实例实现如下的效果:

这边使用到的SlideNavigationController开源类(引入源代码中的Source),其为NavigationController子类,在运用程序AppDelegate就设置为其根视图;主要代码如下:

1:AppDelegate主要代码如下:

#import"AppDelegate.h"#import"SlideNavigationController.h"#import"leftViewController.h"#import"rightViewController.h"#import"ViewController.h"- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

self.window.backgroundColor=[UIColor whiteColor];

//设置根导航视图

ViewController*homeVc =[[ViewController alloc] init];

[self.window setRootViewController:[[SlideNavigationController alloc] initWithRootViewController:homeVc]];

//设置左右视图

leftViewController* leftController=[[leftViewController alloc]init];

rightViewController* rightController=[[rightViewController alloc]init];

[SlideNavigationController sharedInstance].rightMenu=rightController;

[SlideNavigationController sharedInstance].leftMenu=leftController;

[SlideNavigationController sharedInstance].menuRevealAnimationDuration= .18;[self.window makeKeyAndVisible];returnYES;

}

2:主页面ViewController代码:

#import <UIKit/UIKit.h>#import"SlideNavigationController.h"@interface ViewController : UIViewController<SlideNavigationControllerDelegate>@end

#import"ViewController.h"@interface ViewController ()

@end

@implementation ViewController- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor=[UIColor yellowColor];

self.title=@"首页";

UIButton*button = [[UIButton alloc] initWithFrame:CGRectMake(0,0,40,30)];

[button setTitle:@"右边"forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[button addTarget:[SlideNavigationController sharedInstance] action:@selector(toggleRightMenu) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem*rightBarButtonItem =[[UIBarButtonItem alloc] initWithCustomView:button];

[SlideNavigationController sharedInstance].rightBarButtonItem=rightBarButtonItem;

}- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];//Dispose of any resources that can be recreated.}#PRagmamark - SlideNavigationController Methods -

-(BOOL)slideNavigationControllerShouldDisplayLeftMenu

{returnYES;

}-(BOOL)slideNavigationControllerShouldDisplayRightMenu

{returnYES;

}

@end

注意要实现SlideNavigationControllerDelegate的两个是否有左跟右的菜单,还可以设置其导航栏的按键样式,如果没有设置会像左边出现的这种默认的;

3:左边视图leftViewController

#import <UIKit/UIKit.h>#import"SlideNavigationController.h"#import"OneViewController.h"#import"TwoViewController.h"@interface leftViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>@end

#import"leftViewController.h"@interface leftViewController()

@property(nonatomic,strong)UITableView*tableView;

@property(strong,nonatomic) NSArray*listData;

@property(assign,nonatomic)boolslideOutAnimationEnabled;

@end

@implementation leftViewController-(void)viewDidLoad

{

[super viewDidLoad];

self.view.backgroundColor=[UIColor redColor];

[self ininLoadTable];

}-(void)ininLoadTable

{

self.tableView=[[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];

self.tableView.delegate=self;

self.tableView.dataSource=self;

[self.view addSubview:self.tableView];

self.listData=[[NSArray alloc] initWithObjects:@"朋友圈",@"个人好友",@"最近联系人", nil];

}#pragmamark - UITableView Delegate & Datasrouce -

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{returnself.listData.count;

}- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

{

UIView*view = [[UIView alloc] initWithFrame:CGRectMake(0,0, self.tableView.frame.size.width,20)];

view.backgroundColor=[UIColor clearColor];returnview;

}- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

{return20;

}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];if(cell==nil) {

cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

}

cell.textLabel.text=self.listData[indexPath.row];

cell.backgroundColor=[UIColor clearColor];returncell;

}//跳转- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

UIViewController*vc ;switch(indexPath.row)

{case0:

vc=[[OneViewController alloc]init];

break;case1:

vc=[[TwoViewController alloc]init];

break;case2:

vc=[[OneViewController alloc]init];

break;case3:

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];

[[SlideNavigationController sharedInstance] popToRootViewControllerAnimated:YES];return;

break;

}

[[SlideNavigationController sharedInstance] popToRootAndSwitchToViewController:vc

withSlideOutAnimation:self.slideOutAnimationEnabled

andCompletion:nil];

}

@end

注意:这边主要是进行导航跳转时要注意,popToRootViewControllerAnimated跟popToRootAndSwitchToViewController

4:右边的rightViewController

#import"rightViewController.h"@implementation rightViewController-(void)viewDidLoad

{

[super viewDidLoad];

self.view.backgroundColor=[UIColor blueColor];

}

@end

附:另外二个插件也实现更好的效果,地址如下(https://github.com/JVillella/JVFloatingDrawer)效果图如下:

另一个地址如下:(https://github.com/hujewelz/HUSliderMenu)效果图如下:

源代码下载地址:左右侧滑菜单源代码

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航