iPhone数字棚

タップすると、上下に数字がパカッとわれて、次の数字が出てくるような 3 x 3 の棚をiPhoneアプリとして描いてみます。(SpriteKitで使えるSKTransitionのdoorsOpenVerticalWithDurationというのを使ってみました。)

動作イメージ
XcodeからiOS7 iPhone Simulatorで動かすとこんな感じになります。

サンプルコード

#import “ViewController.h”

#import <SpriteKit/SpriteKit.h>

@interface BoxScene : SKScene

@property BOOL contentCreated;

@property (strong, nonatomic) NSString *number;

@end

@implementation BoxScene

– (void)didMoveToView:(SKView *)view

{

    if (!self.contentCreated) {

        [self createSceneContents];

        self.contentCreated = YES;

    }

}

– (void)createSceneContents

{

    self.backgroundColor = [SKColor orangeColor];

    self.scaleMode = SKSceneScaleModeAspectFit;

    [self addChild:[self newBox]];

}

– (SKNode*)newBox

{

    SKLabelNode *box = [SKLabelNode labelNodeWithFontNamed:@”GillSans”];

    box.text = self.number;

    box.fontSize = 80;

    box.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame) – 30);

    box.name = @”boxNode”;

    return box;

}

– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    SKNode *helloNode = [self childNodeWithName:@”boxNode”];

    if (helloNode) {

        SKTransition *doors = [SKTransition doorsOpenVerticalWithDuration:1.0];

        BoxScene *openBox = [[BoxScene alloc] initWithSize:self.size];

        self.number = [NSString stringWithFormat:@”%d”, [self.number intValue] – 1];

        openBox.number = self.number;

        [self.view presentScene:openBox transition:doors];

    }

}

@end

@interface ViewController ()

@end

@implementation ViewController

– (void)viewDidLoad

{

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor purpleColor];

    

    for (int i = 0; i<9; i++) {

        float x = (i % 3) * 100 + 10;

        float y = (i / 3) * 100 + 100;

        SKView *spriteView = [[SKView alloc] initWithFrame:CGRectMake(x, y, 90, 90)];

        [self.view addSubview:spriteView];

        

        BoxScene *box = [[BoxScene alloc] initWithSize:CGSizeMake(90, 90)];

        box.number = @”12″;

        [spriteView presentScene:box];

    }

}

– (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end