zoukankan      html  css  js  c++  java
  • 左右侧滑菜单功能的实现

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

    这边使用到的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]; return YES; }

    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.
    }
    
    #pragma mark - SlideNavigationController Methods -
    
    - (BOOL)slideNavigationControllerShouldDisplayLeftMenu
    {
        return YES;
    }
    
    - (BOOL)slideNavigationControllerShouldDisplayRightMenu
    {
        return YES;
    }
    
    @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) bool slideOutAnimationEnabled;
    
    @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];
    }
    
    
    #pragma mark - UITableView Delegate & Datasrouce -
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return self.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];
        return view;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        return 20;
    }
    
    - (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];
        
        return cell;
    }
    
    //跳转
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UIViewController *vc ;
        
        switch (indexPath.row)
        {
            case 0:
                vc = [[OneViewController alloc]init];
                break;
                
            case 1:
                vc = [[TwoViewController alloc]init];
                break;
                
            case 2:
                vc = [[OneViewController alloc]init];
                break;
                
            case 3:
                [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)效果图如下:

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

  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/wujy/p/4718002.html
Copyright © 2011-2022 走看看