抽屉式导航

浅谈抽屉式导航


抽屉式导航的好处

        抽屉式导航是目前比较流行,应用也比较多一种导航方式,抽屉式导航内可以是二级列表导航如人人网,也可以是一些重要信息展示如:path的消息通知,还可以是一些重要的操作选项入口:如朋友网的聊天、嘀一嘀、圈子等。这种导航方式的优点是:导航的条目不受数量限制,而且可根据选项的重要等级选择提供入口,或者将内容展示,操作灵活性比较大。

       

核心思路

       抽屉式导航的核心思路是“隐藏”。隐藏非核心的操作与功能,让用户更专注于核心的功能操作上去。个人认为,隐藏的思维是移动产品设计中最核心的一个思想。上周在极客公园分享了关于如何应用缩小、隐藏、赋加的思路来做移动产品设计的话题,而这个思路中最最核心的恰恰是隐藏。

      这种导航方式会逐渐流行,推测的依据就是随着移动产品设计的演进,越来越多的产品设计师开始认识到只有让核心更突出才能提高整体产品的体验,只有不断降低用户的干扰才能不断提高用户的使用效率。

使用抽屉式导航的步骤

本文以IOS中使用抽屉式导航为例进行简单的说明:

第一步:导入MMDrawerController框架

 下载地址:

http://code4app.com/ios/%E4%BB%BF%E7%BD%91%E6%98%93%E6%96%B0%E9%97%BB%E7%9A%84%E6%BB%91%E5

%8A%A8%E8%A7%86%E5%9B%BE%E5%B8%83%E5%B1%80/5255fbd96803fa8660000000

,其中包含MMDrawerBarButtonItem,MMDrawerController,MMDraVisualState,UIViewController+MMDrawerController这几个核心类。

第二步:新建左侧菜单栏类:

新建一个SUNLeftMenuViewController类并带有xib文件,实现左侧菜单栏

SUNLeftMenuViewConTroller*leftVC=[[SUNLeftMenuViewController alloc] initWithNibName:@”SUNLeftMenuViewController”bundle:nil];

此类中包含如下三个属性:

@property (nonatomic,strong)UITableView *tableViewLeft;
@property (nonatomic,strong)UINavigationController *navSlideSwitchVC;//主页
@property (nonatomic,strong)UINavigationController *navCommonComponentVC;//健康常识

此类中的一些重要代码

//tableView的代理方法设置菜单栏每项的标题
- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = indexPath.row;
    int section = indexPath.section;
    NSString *LeftSideCellId =@"LeftSideCellId";
    UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:LeftSideCellId];
    if (cell ==nil) {
        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleValue1reuseIdentifier:LeftSideCellId];
    }
    if (section ==0)
    {
        if (row == 0)
        {
            cell.textLabel.text =@"菜单栏选项";
 
        } else if (row == 1)
        {
            cell.textLabel.text =@"主页";
        }else if(row==2)
        {
            cell.textLabel.text=@"健康常识";
        }
       
    }
    return  cell;
}
//当点击左侧菜单栏选项时触发的方法(即进入相应的界面)
- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int section = indexPath.section;
    int row = indexPath.row;
    if (section ==0)
    {
        if (row == 1)
        { //进入主页界面
            if (!self.navSlideSwitchVC)
          {
                SUNSlideSwitchDemoViewController*slideSwitchVC = [[SUNSlideSwitchDemoViewControlleralloc]init];
               
                self.navSlideSwitchVC = [[UINavigationControlleralloc]initWithRootViewController:slideSwitchVC];
            }
           
            [self.mm_drawerControllersetCenterViewController:self.navSlideSwitchVC
                               withCloseAnimation:YEScompletion:nil];
        } else if (row == 2)
        { //进入健康常识界面          
            if (!self.navCommonComponentVC)
          {
                SUNTextFieldDemoViewController*textFieldDemoVC = [[SUNTextFieldDemoViewController alloc] init];
               
                self.navCommonComponentVC = [[UINavigationController alloc]initWithRootViewController:textFieldDemoVC];
          }
           //This sets the view controller and will automatically adjust the framebased on the current state of the drawer controller. If `closeAnimated` is YES,it will immediately change the center view controller, and close the drawerfrom its current position
               [self.mm_drawerControllersetCenterViewController:self.navCommonComponentVC
                                          withCloseAnimation:YEScompletion:nil];
        }
    }
    [tableView deselectRowAtIndexPath:indexPathanimated:YES];
}


左侧菜单栏界面如下


第三步:

以下步骤AppDelegate类如下方法中实现

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions


1.     初始化MMDrawerController对象

SUNViewController* drawerController = [[SUNViewController alloc]
initWithCenterViewController:leftVC.navSlideSwitchVC
                                            leftDrawerViewController:leftVC
                                            rightDrawerViewController:nil];


注:SUNViewController继承自MMDrawerController类,此初始化方法中可以初始化左右菜单栏,并且程序运行时进入主页视图。

2.设置左侧抽屉菜单栏的宽度

[drawerControllersetMaximumLeftDrawerWidth:240f];

3.设置打开抽屉菜单的手势

[drawerControllersetOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];

4.关闭抽屉菜单的手势

[drawerControllersetCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];

5.此处block负责更新drawer的视图状态,当用户打开或关闭抽屉菜单,以及平移抽屉时实现动画效果。但只是更新它的一个状态(如α,锚点,变换,等)。请注意,如果shouldstretchdrawer设置为“是”,则可能使percentvisible 大于1。如果shouldstretchdrawer设置为无, percentvisible不会大于1,

注意,当抽屉完成开启或关闭,侧抽屉控制器将具有以下性质复位:

- alpha: 1.0

- transform:CATransform3DIdentity

- anchorPoint:(0.5,0.5)

 

[drawerControllersetDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSidedrawerSide, CGFloat percentVisible) {
        MMDrawerControllerDrawerVisualStateBlockblock;
  block = [MMDrawerVisualStateparallaxVisualStateBlockWithParallaxFactor:2.0];
        block(drawerController, drawerSide,percentVisible);
}];

适合使用的情况

    我的建议是,如果应用主要的功能和内容都在一个页面里面。只是一些用户设置和选项需要显示在其他页面里。处于让主页面看上去干净美观的目的可以把这些辅助功能放在侧边栏里。而如果你的应用有不同的视图,且他们是平级的,需要用户同等地对待,侧边栏将会浪费掉大多数的用户对于侧边栏中入口的潜在参与度和交互程度。而不适合抽屉式导航的App则有需要用户不断在导航间进行切换的App、没必要有太多导航的App、或者核心功能就是一堆入口的App。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽屉式导航是一种常见的导航菜单样式,其设计灵感来源于家具中的抽屉。在网页或移动应用中,抽屉式导航常用来展示页面或应用的主要功能选项。 Python作为一种流行的编程语言,可以用来设计和实现抽屉式导航。可以使用Python的各种库和框架来创建一个交互式、可定制的抽屉式导航菜单。 使用Python编写抽屉式导航主要步骤如下: 1. 导入必要的库和模块:在Python中,可以使用诸如Tkinter、PyQt等库来创建图形用户界面(GUI)。导入这些库和模块是创建抽屉式导航的第一步。 2. 创建主窗口:使用选定的库和模块创建一个主窗口,该窗口将容纳抽屉式导航和其他界面元素。 3. 设计抽屉式导航:在主窗口中创建一个抽屉式导航部件,并设置其外观和功能。可以使用按钮、标签、下拉列表等界面元素来表示导航菜单项。 4. 响应用户交互:编写代码来响应用户的点击或选择操作。例如,可以使用回调函数来处理按钮点击事件,以便执行相应的操作或导航到其他页面。 5. 添加其他功能:根据需求,可以添加其他功能,如搜索框、用户配置选项等。 6. 运行程序:最后,通过调用主窗口的运行函数或启动循环来启动程序,并显示抽屉式导航和其他界面组件。 总而言之,利用Python编写抽屉式导航主要涉及选择适当的库和模块来创建图形用户界面,并通过编写代码来设计和实现导航菜单的外观和功能。这样,用户就可以方便地浏览和访问应用程序中的不同功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值