开发像Facebook的新iOS应用程序中的侧边菜单的最佳方法是什么?

Nic*_*ill 155 cocoa-touch objective-c ios

侧面滑动菜单似乎正在成为一种更常见的界面元素,因为更多信息被塞进每个iPhone应用程序中.Facebook已将其纳入最新版本,新的Gmail应用程序似乎也包括在内.我想知道是否有人想到最有效的方式来开发这样的东西,因为它正在成为一个更常见的界面元素.虽然我对如何构建这个有自己的想法,但我很想知道其他人的想法.

Facebook刷卡导航

Chr*_*ler 84

Tom Adriaenssen有一个很棒的图书馆:Inferis/ViewDeck

它非常易于使用,并且具有相当大的跟随力.

编辑:

对于更轻量级的东西,请查看:mutualmobile/MMDrawerController

它没有ViewDeck的所有功能,但更容易修改和扩展.

  • 我们已将它用于多个应用程序,但维护和添加新功能非常困难.它也试图实施太多.我们决定编写自己的名为MMDrawerController.重量轻,重点突出:https://github.com/mutualmobile/MMDrawerController (13认同)
  • 我建议大家都用这个. (6认同)
  • 最佳解决方案:灵活且易于使用 (3认同)
  • 我试了一下,在他们的例子中发现了很多错误.经过一些快速点击后,视图控制器未对齐 (2认同)

Mic*_*ick 48

我为此创建了一个库.它被称为MFSideMenu.

其中包括支持iphone + ipad,纵向+横向,左侧或右侧菜单,UITabBarController和平移手势.

  • 对于任何有兴趣的人,我只是为图书馆添加了景观支持. (6认同)

Zak*_*man 34

我最近遇到过这个,实际上并未查看代码或测试控件,但看起来它可能是一个非常不错的起点.

jtrevealsidebar

编辑:读者还应该看看其他答案:)

  • 如果您正在寻找滑动功能.将手势识别器插入视图,然后用手势识别器替换切换按钮. (6认同)

kch*_*ood 29

看看MMDrawerController:

MMDrawerController

我们找不到我们喜欢的图书馆,所以我们只是推出了自己的图书馆.

  • 只是想说这是BY FAR这里列出的最佳实现.这个帖子的新手:使用MMDrawerController. (10认同)

Ján*_*nos 12

您必须设置self.navigationController.view的框架或中心关键想法.有两个事件,你必须处理.(1)barButtonItem按.(2)因滑动而平移手势.

您可以将视图控制器发送到后台,如下所示:

[self.view sendSubviewToBack:menuViewController.view];

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(buttonPressed:)];
    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [self.navigationController.view addGestureRecognizer:panGestureRecognizer];
    self.navigationItem.leftBarButtonItem = barButtonItem;
}

- (void)buttonPressed:(id)sender {

    CGRect destination = self.navigationController.view.frame;

    if (destination.origin.x > 0) {
        destination.origin.x = 0;
    } else {
        destination.origin.x = 320;
    }

    [UIView animateWithDuration:0.25 animations:^{
        self.navigationController.view.frame = destination;
    }];
}

- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
    static CGPoint originalCenter;

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        originalCenter = recognizer.view.center;

    } else if (recognizer.state == UIGestureRecognizerStateChanged)
    {
        CGPoint translation = [recognizer translationInView:self.view];

        recognizer.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y);
    }
    else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled || recognizer.state == UIGestureRecognizerStateFailed)
    {
        if (recognizer.view.frame.origin.x < 160) {
            [UIView animateWithDuration:0.25 animations:^{
                recognizer.view.center = CGPointMake(384, 487.5);
            }];
        } else {
            [UIView animateWithDuration:0.25 animations:^{
                recognizer.view.center = CGPointMake(384 + 320, 487.5);
            }];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


pkl*_*luz 11

Facebook的实现在UINavigationBar上放置了一个UIPanGestureRecognizer.因此允许在需要的地方捕捉滑动.

这允许做一些事情,例如直接识别x/z中的触摸方向以及它们发生的速度.

还有这样的修补UIViews(一次在屏幕上显示不同的任务 - >因此不同的控制器)应该(我很想说必须)使用iOS新的ViewController-Containment功能.没有它的每一个实现都是不好的,因为它以一种非Apple意图的方式修改了视图层次结构.

旁注:如果你真的很好奇如何尽可能接近Facebook的方式,请查看我在Github PKRevealController上开源的项目.


小智 11

更好的是JASidePanels.易于实施,适用于iPhone和iPad.

Github链接:JASidePanels


AJ1*_*112 8

开发人员已经创建了数十个不同的库来实现iOS应用程序的Facebook/Path风格导航.我可以列出所有这些,但是你要求最好的一个,这是我用来实现侧滑动导航菜单的两个选择:

1)ECSlidingViewController 它也很容易实现和使用Storyboard.我没有遇到任何问题,也没有收到任何错误或类似的错误.我提供的链接几乎有所有解释才能使用它.

2)SWRevealViewController 这个库很容易使用,你可以在这里找到一个教程,它展示了如何使用所有的解释和图像来实现它.您可以按照教程进行操作,稍后再次感谢我.


hun*_*y54 7

另一种选择是使用Scringo.它为您提供了youtube/facebook应用程序中的侧边菜单,以及您可以选择添加的菜单中的所有内置功能(例如聊天,邀请朋友等...)

只需调用[ScringoAgent startSession ...]即可添加侧边菜单,所有配置都可以在网站上完成.