UISplitViewController の左ペインを開閉する方法

ここんとこ悩んでた SplitViewController で横向きのときに root view (master view) を開閉する方法を発見!サンプルコードも公開されてるのがありがたい。iOS4.0.2 で実行できること確認できた。:-)


ポイントは2つ。1つ目は非表示のときは UISplitViewController を window から remove すること。2つ目は戻すときに setTransform:CGAffineTransformIdentity で向きの調整をしてること。
サンプル動画にもあったけど setTransform:CGAffineTransformIdentity を指定しないと回転してると変な方向で rootViewController が表示される。試しにコメントアウトしたら、ホントに変な向きに root view が表示された。^^;)

正しくは表示切替なわけなんだけど、自分の望んでいる要件は満たせるし。ちょっと強引な気もするけど、アニメーション動作しないことを除けば、これが一番確実なんだろね。デモ動画も掲載されてたので同じ悩みを抱えてる人はサイトを見てみるといいよ。:-)

@implementation SplitViewTestAppDelegate

- (IBAction)toggleSplitView:(id)sender {
    if ( [window.subviews containsObject:splitViewController.view] ) {
        
        [splitViewController.view removeFromSuperview];
        
        splitViewController.viewControllers = [NSArray arrayWithObjects:rootViewController, rootViewController, nil];
        
        [window addSubview:detailViewController.view];
        
        [(UIBarButtonItem *)sender setTitle:@"Show Sidebar"];
    
    } else {
        
        [detailViewController.view removeFromSuperview];
        [detailViewController.view setTransform:CGAffineTransformIdentity];
        
        splitViewController.viewControllers = [NSArray arrayWithObjects:rootViewController, detailViewController, nil];
        
        [window addSubview:splitViewController.view];
        [detailViewController.view sizeToFit];
        
        [(UIBarButtonItem *)sender setTitle:@"Hide Sidebar"];
    }
}
検証環境
  • Mac OSX 10.6.8
  • Xcode 4.0.2
おまけ

わざと setTransform:CGAffineTransformIdentity をコメントアウトしたときの動作結果をはっとこ。ネタになる :-)