[iOS]画面遷移(始点) | Cocoa練習帳

[iOS]画面遷移(始点)

「独自のコンテナViewController」に戻る。




サンプルコードはRetina 4inchは考慮していないので、試す場合は、以前の画面サイズで行って欲しい。画面と同じサイズのDefault.pngを用意する。その際、座標が分かりやすい図とする。そして、最初に表示するViewControllerの画面にも、Default.pngを貼付けて欲しい。そして、実行するとどうなるか?最初の画面が表示される際に、図が少し下がったように見えないか?




これは、親ビューコントローラのビューの座標の始点が、ステータスバー分だけ下がっているが、nibでの子ビューコントローラーのビューの座標が、ステータスバーを考慮して下げられているからだ。




なので、小ビューコントローラのビューの始点を原点にすれば、解決する。




@implementation CVCViewController
...
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    /* 子ビューコントローラを取得 */
    UIStoryboard    *oneStoryboard = [UIStoryboard storyboardWithName:@"OneStoryboard" bundle:nil];
    UIStoryboard    *twoStoryboard = [UIStoryboard storyboardWithName:@"TwoStoryboard" bundle:nil];
    OneViewController   *oneViewController = [oneStoryboard instantiateInitialViewController];
    TwoViewController   *twoViewController = [twoStoryboard instantiateInitialViewController];
    
    /* コンテナViewControllerの子ViewControllerに登録 */
    [self addChildViewController:oneViewController];
    [self addChildViewController:twoViewController];
    oneViewController.cvcViewController = self;
    twoViewController.cvcViewController = self;
    
    /* 強制的に呼ぶ */
    [oneViewController didMoveToParentViewController:self];
    [twoViewController didMoveToParentViewController:self];
    
    /* 最初の画面を設定 */
    self.selectedViewController = [self.childViewControllers objectAtIndex:0];
    CGRect  frame = self.selectedViewController.view.frame;
    frame.origin = CGPointMake(0.0, 0.0);
    self.selectedViewController.view.frame = frame;
    [self.view addSubview:self.selectedViewController.view];
}
...
@end



これで、少し悩んだ事があった。




ソースコード
GitHubからどうぞ。

https://github.com/murakami/workbook/tree/master/ios/TransitionView - GitHub

https://github.com/murakami/workbook/tree/master/ios/ContainerVC - GitHub



関連情報
iOS View プログラミングガイド



【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)