8

我已经实现了滑动菜单,但我想要与 facebook 完全一样的滑动效果。我在stackoverflow上看到了以下帖子:

iphone facebook侧边菜单使用objective c

我想实施 greenisus 给出的解决方案(投票 15 次),但我在实施时遇到了麻烦,Bot 在对他的回答的评论中提出了同样的问题。“@greenisus 我对你如何将菜单放在后面感到困惑?当我这样做时,它只会显示一个黑色的侧面菜单。” 这还没有回答。

他的答案供参考的文字是:

这真的很简单。首先,您需要创建一个位于可见控制器下方的视图控制器。您可以像这样将该视图发送到后面:

[self.view sendSubviewToBack:menuViewController.view];

然后,在导航栏的左侧放置一个菜单按钮,并编写如下处理程序:

- (void)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);
    }];
}

这是一般的想法。您可能必须更改代码以反映您的视图层次结构等。

只是想知道我们什么时候必须使用下面的方法,第二种方法很简单,效果很好,但它下面不显示菜单视图。

[self.view sendSubviewToBack:menuViewController.view];

寻找一些指针或解决方案来正确运行上述代码。

4

1 回答 1

2

其实你应该知道我们该怎么做。只需将 menuViewController.view 添加为 self.view 的子视图。但这将覆盖navigationController.view,所以你可以只[self.view sendSubviewToBack:menuViewController.view]。当您需要显示/隐藏 menuViewController 时,您需要使用方法 - (void)menuButtonPressed:(id)sender。

在 HomeViewController 中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // be careful with the sequence of the code. If you firstly add the contentViewController and then add the 
    // menuViewController you need to [self.view sendSubviewToBack:self.menuViewController.view], else you don't
    // need to use sendSubviewToBack.
    self.menuViewController = [[MenuViewController alloc] init];
    self.contentViewController = [[ContentViewController alloc] init];
    [self.view addSubview:self.menuViewController.view];
    [self.view addSubview:self.contentViewController.view];
}

在 ContentViewController 中:

- (IBAction)showMenu:(id)sender
{
    CGRect destination = self.view.frame;
    if (destination.origin.x > 0) {
        destination.origin.x = 0;
    } else {
        destination.origin.x += 254.5;
    }
    [UIView animateWithDuration:0.25 animations:^{
        self.view.frame = destination;        
    } completion:^(BOOL finished) {
        //self.view.userInteractionEnabled = !(destination.origin.x > 0);
    }];
}
于 2012-08-20T04:37:27.867 回答