如何创建简单的菜单?

时间:2012-11-22 15:01:02

标签: iphone ios uiviewcontroller menu subview

我正在尝试在我的应用中创建简单的(类似Facebook)菜单。我发现了几个问题,其中大多数已经接受了答案,但通常答案是使用开发人员完成的一些程序。

这些程序通常是旧版本的xCode(一个,没有使用故事板),那些在故事板中完成的程序对我来说太复杂了,无法在我的应用程序中实现。

所以我找到了一个问题,其答案如下: 1.创建菜单视图控制器(UITableViewController对我来说) 2.在初始视图控制器中隐藏此控制器:

MenuViewController *menView = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];

    [self.view sendSubviewToBack:menView.view];

3创建一个按钮(可能稍后平移手势),在它的方法中,执行以下操作:

-(IBAction)menuButtonPressed:(id)sender
 {
    CGRect destination = self.navigationController.view.frame;

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

    [UIView animateWithDuration:0.25 animations:^{
        self.navigationController.view.frame = destination;
    } completion:^(BOOL finished)
     {
         self.view.userInteractionEnabled = !(destination.origin.x > 0);
     }];


}

我猜这是什么,它基本上是按固定长度向右移动你的视图。我想,你的观点,即你传递的ToBack(你的UITableView)应该是暴露和可交互的。然而,它对我来说只是向右移动顶视图,并留下空白的黑色屏幕。

现在我想,我的问题是要么对menuView进行错误的实例化,要么就是我错误地指出了这个指南。

如果有人知道,如何处理这个问题,我会非常感谢答案。也许有一些已经完成的应用程序,这很容易理解,并希望在我的代码中更容易实现:)

谢谢!

1 个答案:

答案 0 :(得分:1)

我会在故事板中使用容器视图来执行此操作。您可以根据自己的喜好调整左侧的大小,然后在旁边添加一个右侧的大小,并在检查器中将其宽度更改为320 - 大部分将从屏幕右侧移动,并且它将调整其嵌入式控制器的大小全屏尺寸。您可以删除左侧容器视图中获得的视图控制器,然后拖出一个表视图控制器,并使用embed segue从左侧视图连接它(当您从容器视图控制拖动时,它将是唯一的选择) 。我在主控制器的视图中添加了两个滑动手势识别器(一个左手和一个右手),并将它们连接到主控制器中的两个方法。然后在主控制器中,我在.h:

中有这个代码
@interface ViewController : UIViewController

@property (weak,nonatomic) IBOutlet UIView *rightView;
@property (assign,nonatomic) CGRect rightRect;

@end

在.m中,只有这个:

@implementation ViewController

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.rightRect = self.rightView.frame;
}


-(IBAction)revealSidebar:(id)sender {
    [UIView animateWithDuration:.3 animations:^{
        self.rightView.frame = self.view.window.frame;
    }];
}

-(IBAction)hideSidebar:(id)sender {
    [UIView animateWithDuration:.3 animations:^{
        self.rightView.frame = self.rightRect;
    }];
}
@end