2

我正在向一个应用程序添加一些功能,该功能与 iOS 上 Springboard 上的应用程序切换抽屉非常相似。我希望能够有一个我可以点击的按钮,它将动画视图的 y 坐标向上,以便在底部显示另一个视图。就像我说的,非常类似于 iOS 上的主页按钮双击功能。

环顾四周后,似乎我需要将两个子视图控制器包装到一个父视图控制器中。

我该怎么做呢?现有的视图控制器非常复杂,所以我很难弄清楚从哪里开始。

4

2 回答 2

2

我不知道您需要使用父视图控制器来执行此操作。这段代码让我可以做我认为你想做的事。我有一个 BOOL ivar 来跟踪底部视图是否已显示,并使用主视图中的相同按钮在两种状态之间切换。

-(IBAction)slideInController:(UIButton *) sender {
    if (viewRevealed == NO) {
        next = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"];
        next.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + self.view.frame.size.height, self.view.frame.size.width, 100); // my NextController's view was made 100 points high in IB.
        [self.view.window addSubview:next.view];
        [UIView animateWithDuration:.6 animations:^{
            self.view.center = CGPointMake(self.view.center.x, self.view.center.y - 100);
            next.view.center = CGPointMake(next.view.center.x, next.view.center.y - 100);
        } completion:^(BOOL finished) {
            viewRevealed = YES;
        }];
    }else{
        [UIView animateWithDuration:.6 animations:^{
            self.view.center = CGPointMake(self.view.center.x, self.view.center.y + 100);
            next.view.center = CGPointMake(next.view.center.x, next.view.center.y + 100);
        } completion:^(BOOL finished) {
            [next.view removeFromSuperview];
            viewRevealed = NO;
        }];
    }
}

我通常确实使用容器视图控制器来做这种事情,但这很有效,而且非常简单。

于 2013-01-10T04:33:54.137 回答
0

您可能想要使用 UINavigationController,然后在点击按钮后推送新的视图控制器。所以你会有你的主 UIViewController 有你不同的选择。当点击该按钮时,您将创建视图控制器的一个实例并将该视图控制器推送到堆栈的顶部。您的代码可能看起来像这样

-(IBAction)ViewControllerOneTapped:(id)sender
{   
    UIViewController *vcOne = [[UIViewController alloc] initWithNibName:@"ViewControllerOne" bundle:nil];
    [self.navigationController pushViewController:vcOne animated:YES];
}

您的最终代码将比有人一直为您编写的要复杂得多,但这是您可能想要采取的总体方向。

于 2013-01-10T03:57:06.173 回答