• 左右侧滑菜单功能的实现


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

    这边使用到的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)效果图如下:

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

  • 相关阅读:
    最小乘积(基本型)
    删除数组零元素
    大小写转换
    矩阵乘法
    字串统计
    出现次数最多的整数
    Anagrams问题
    前缀表达式
    2的次幂表示
    POJ
  • 原文地址:https://www.cnblogs.com/wujy/p/4718002.html
Copyright © 2020-2023  润新知