なんかの Log

良い感じで投げっぱなしにしてみせる。

Cocos2dとStoryboardを組み合わせる

iOS初心者にはなかなか大変でした。

環境

Tool Version
XCode 4.6.1
Cocos2d v2.1-rc1

Storyboardを作成

プロジェクトはCocos2dの初期テンプレートを使ってます。 適当に。closeボタンを押したらCocos2dの画面に戻りたい。名前はStoryboard.storybordとかにしてます。

f:id:sugumura:20130406161009p:plain

StoryboardのためにUIViewControlerを作成

UIViewControllerを継承したStoryboardViewControllerクラスを作ります。作成したあとはStoryboardを作成したStoryboardViewControllerをCustom Classとして設定します。ついでにStoryboardのCloseボタンからIBActionを接続しておきます。

f:id:sugumura:20130406163103p:plain

// StoryboardViewController.h

#import <UIKit/UIKit.h>

@interface StoryboardViewController : UIViewController
- (IBAction)backCocos2d:(id)sender;

@end


// StoryboardViewController.m
#import "StoryboardViewController.h"
#import "AppDelegate.h"

@interface StoryboardViewController ()

@end

@implementation StoryboardViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)backCocos2d:(id)sender {

}
@end

Cocos2dからStoryboard画面へ遷移

めんどくさいんでハローワールドのコードをそのまま使います。LeaderboardのボタンをStoryboardの呼び出しに変更します。

// HelloWorldLayer.m

// CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Leaderboard" block:^(id sender) {
CCMenuItem *itemLeaderboard = [CCMenuItemFont itemWithString:@"Storyboard" block:^(id sender) {            
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle mainBundle]];
            UIViewController *initialViewController = [storyboard instantiateInitialViewController];
            [[CCDirector sharedDirector] presentViewController:initialViewController animated:YES completion:nil];
        }];

[CCDirector sharedDirector]でCocos2dが持っているUIViewControllerを取得できるみたいです。あとはインスタンス化したStoryboardからCustom Classに設定したUIViewControllerを取得してコントロールを渡して上げればOKです。

実行してStoryboard画面が見えればOK。

StoryboardからCocos2d画面へ戻る

接続していたIBActionメソッドに書きます。

// StoryboardViewController.m

- (IBAction)backCocos2d:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

自由に行き来ができるようになったはず。

参考サイトと書籍

プロの力を身につける iPhone/iPadアプリケーション開発の教科書

プロの力を身につける iPhone/iPadアプリケーション開発の教科書