ViewDeck(Storyboardで利用する)
Facebook likeなスライディングメニューを実装するViewDeck()使い方も簡単でgit hubにばっちり説明してあります。しかし, storyboard上から利用する方法を考えるとちょっと迷います。
そのためのメモです。
今回作成したものは左側にメニューっぽいものを表示させるものです。ViewDeckは,右側もばっちりサポートしていますが, 今回は使用しておりません。
AppDelegateスタート画面に実装する場合
- Story上でUIを作成
- 各ViewControllerに, Storyboard IDをつける
- ViewControllerにスライド用のActionを実装
- AppDelegateにIIViewDeckControllerを作ってrootViewControllerに設定
Storyboard上にUIをつくる
Navigation barでもなんでもよいので, Menu viewを呼び出すためのボタンなどを作ります。各Viewごとに
ViewControllerをつくります。
各ViewControllerに, Storyboard IDをつける
Storyboard IDをつけて, コードからコントローラを呼び出す体制をつくります。
Centerで使用する部分に, CenterView, メニューとして使う左側の部分に, LeftViewと名付けました。
ViewControllerにスライドをするためのActionを実装
CenterであるViewControllerにアクションを実装します。これをNavigation Barのボタンに接続します。
- (IBAction)leftClick:(id)sender
{
[self.viewDeckController toggleLeftViewAnimated:YES];
}
これでスライドメニューを表示•非表示にするアクションが実装できました。
AppDelegateの実装
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [self generateControllerStack];
[self.window makeKeyAndVisible];
return YES;
}
- (IIViewDeckController*)generateControllerStack
{
UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MenuViewController *leftController = [mystoryboard instantiateViewControllerWithIdentifier:@"LeftView"];
UIViewController *centerController = [mystoryboard instantiateViewControllerWithIdentifier:@"CenterView"];
IIViewDeckController* deckController = [[IIViewDeckController alloc] initWithCenterViewController:centerController leftViewController:leftController rightViewController:nil];
deckController.rightSize = 100;
[deckController disablePanOverViewsOfClass:NSClassFromString(@"_UITableViewHeaderFooterContentView")];
return deckController;
}
storyboardから, 各ViewControllerを取得します。
IIViewDeckControllerのインスタンスを作成して, center, left, rightにかくViewController を割り当てます。
いらない場合はnilにしておきます。
最後に, windowのrootViewControllerに設定すれば, 最初の画面の場合はO.K.です。
AppDelegate以外つまり2ページ目以降に実装する場合
ページの途中で必要な場合上とは違う工夫が必要になります。
CenterとなるViewControllerを作成します。 (IIViewDeckControllerを拡張します)。
– (id)initWithCoder:(NSCoder *)aDecoderというメソッドをOverrideします。
この中で, AppDelegateでやったことと同じようなコードを実装します。
- (id)initWithCoder:(NSCoder *)aDecoder
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewController1 *centerController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];
ViewController2 *leftController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
self = [super initWithCenterViewController:centerController
leftViewController:leftController];
self.centerhiddenInteractivity = IIViewDeckCenterHiddenNotUserInteractiveWithTapToClose; // Disable touch event when switch other view.
self.viewDeckController.bounceOpenSideDurationFactor = 0.3f;
if (self) {
// Add any extra init code here
}
return self;
}
こんな感じです。これらを管理するための別のViewControllerにこいつを実装します。やっていることはAppDelegateと同じですが,
ViewControllerに実装するのがこつです。




