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]

そうでない場合は、View Controller がウィンドウに追加されるコードを調整します。VC が rootWindowController で、ストーリーボードを使用していない場合、AppDelegate にある可能性があります

ストーリーボードを使用する場合は、ストーリーボードを調整して、ナビゲーション コントローラー内にいるようにします。


ELSE 何らかの理由でそれを望まない場合: :) [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];
}];

完了ブロックで、すでに自分で行ったように、アニメーション化されていないView Controller 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 に答える