8

我有一个单一的视图应用程序,并希望在按下右侧的导航栏按钮时显示一个新的 ViewController。我用这段代码调用这个 VC:

- (IBAction)createEntryButton:(id)sender {
    CreateEntryViewController *vc2 = [[CreateEntryViewController alloc] init];
    [self presentViewController:vc2 animated:TRUE completion:nil];
}

然而,这个动画vc2从底部引入,根据我的 UI,这似乎违反直觉。所以我的问题是:

如何使用 presentViewController 使我的 vc2 从右侧而不是底部显示?

谢谢。

4

2 回答 2

9

最干净的方法是使用 navigationController 来推送和弹出视图。

如果您已经在 NavigationController 中

[self.navigationCtroller pushViewController:vc2 animated:TRUE completion:nil]

如果不是,请调整将视图控制器添加到窗口的代码。如果您的 VC 是 rootWindowController 并且您没有使用情节提要,这可能在您的 AppDelegate 中

如果您使用故事板,请调整故事板,以便您在导航控制器中


否则,如果您出于任何原因不希望这样做::) 只需使用 [UIView animate:vc2.view ....] 在 2. VC 的视图中手动设置动画

内联编写——方法名称不匹配,但显示一般方法:

UIView *v = vc2.view;
CGRect f = v.frame;
f.origin.x += self.view.frame.size.width; //move to right

v.frame = f;

[UIView animateWithDuration:0.5 animations:^{
    v.frame = self.view.frame;
} completion:^(BOOL finished) {
   [self presentViewController:vc2 animated:NO completion:nil];
}];

在完成块中呈现视图控制器 vc2 非动画,因为您自己已经这样做了

于 2013-02-24T14:10:17.943 回答
0

这对我有帮助,

- (void)presentNewViewController{
    NewViewController *objNewViewController =[[NewViewController alloc]initWithNibName:@"NewViewController" bundle:nil];

    UIView *tempNewVCView = [UIView new];
    tempNewVCView = objNewViewController.view;
    tempNewVCView.frame = self.view.frame;

    CGRect initialFrame = self.view.frame;
    initialFrame.origin.x = self.view.frame.size.width;

    tempNewVCView.frame = initialFrame;

    [self.view addSubview:tempNewVCView];

    [UIView animateWithDuration:0.3 animations:^{
        tempNewVCView.frame = self.view.frame;
    } completion:^(BOOL finished) {
        [self presentViewController:objNewViewController animated:NO completion:^{
        }];
    }];
}
于 2016-09-29T14:05:48.030 回答