0

我正在尝试在我的应用程序中创建简单的(类似 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);
     }];


}

我猜这是什么,它基本上将您的视图向右移动了固定长度。我想,你的视图,你 sendToBack (你的 UITableView)应该是公开的和可交互的。但是,它对我所做的只是将顶视图向右移动,并留下空白的黑色屏幕。

现在我想,我的问题要么是 menuView 的错误实例化,要么就是我对本指南的理解错误。

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

谢谢!

4

1 回答 1

1

我会在情节提要中使用容器视图来做到这一点。您可以根据自己的喜好调整左侧的大小,然后在其旁边添加一个右侧的,然后在检查器中将其宽度更改为 320——其中大部分将离开屏幕到右侧,它会将其嵌入式控制器的大小调整为是全屏尺寸。您可以删除使用左侧容器视图获得的视图控制器,然后拖出一个表格视图控制器,并使用嵌入segue从左侧视图连接它(当您控制从容器视图拖动时,这将是唯一的选择) . 我在主控制器的视图中添加了两个滑动手势识别器(一个左一个,一个右),并将它们连接到主控制器中的 2 个方法。然后在主控制器中,我在 .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
于 2012-11-22T16:35:10.960 回答