文字を三枚にスライスするiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@import SpriteKit;
@interface ViewController ()
@property (nonatomic, weak) SKScene *scene;
@property (nonatomic) BOOL ready;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[self setupScene];
[self createLetter];
}
– (void)setupScene {
SKView *sv = [[SKView alloc] initWithFrame:self.view.bounds];
SKScene *scene = [SKScene sceneWithSize:sv.frame.size];
scene.backgroundColor = [self color:0];
[sv presentScene:scene];
[self.view addSubview:sv];
self.scene = scene;
}
– (void)createLetter {
float x = CGRectGetMaxX(self.view.bounds);
float y = CGRectGetMaxY(self.view.bounds);
SKSpriteNode *mask = [SKSpriteNode spriteNodeWithColor:[self color:0] size:CGSizeMake(x * 0.2, y * 0.2)];
SKCropNode *crop = [SKCropNode node];
crop.name = @”cropA”;
crop.position = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
crop.maskNode = mask;
[self.scene addChild:crop];
SKSpriteNode *back = [SKSpriteNode spriteNodeWithColor:[self color:1] size:CGSizeMake(x, y)];
[crop addChild:back];
SKLabelNode *label = [SKLabelNode labelNodeWithText:@”Slice”];
label.name = @”label”;
label.fontSize = 130;
label.fontColor = [self color:2];
[crop addChild:label];
}
– (void)readyLetterSlice {
float x = CGRectGetMaxX(self.view.bounds);
float y = 50;
SKLabelNode *label = (SKLabelNode *)[self.scene childNodeWithName:@”cropA/label”];
for (int i=0; i<3; i++) {
CGPoint points[] = {CGPointMake(0, 0),CGPointMake(0, y), CGPointMake(0, 2 * y)};
SKSpriteNode *mask = [SKSpriteNode spriteNodeWithColor:[self color:0] size:CGSizeMake(x, y)];
mask.position = points[i];
SKCropNode *crop = [SKCropNode node];
crop.name = @[@”cropTop”, @”cropMid”, @”cropBottom”][i];
crop.maskNode = mask;
crop.position = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
[self.scene addChild:crop];
SKLabelNode *l = [SKLabelNode labelNodeWithText:label.text];
l.fontColor = label.fontColor;
l.fontSize = label.fontSize;
[crop addChild:l];
}
[label removeFromParent];
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
SKCropNode *crop = (SKCropNode *)[self.scene childNodeWithName:@”cropA”];
if (!self.ready) {
[crop.maskNode runAction:[SKAction sequence:@[
[SKAction scaleXTo:5.0 duration:0.5],
[SKAction scaleYTo:5.0 duration:0.5]
]] completion:^{
[self readyLetterSlice];
self.ready = YES;
}];
} else {
[self.scene.children[0] runAction:[SKAction rotateByAngle:M_PI * 0.3 duration:2.5]];
SKCropNode *cropT = (SKCropNode *)[self.scene childNodeWithName:@”cropTop”];
SKCropNode *cropM = (SKCropNode *)[self.scene childNodeWithName:@”cropMid”];
SKCropNode *cropB = (SKCropNode *)[self.scene childNodeWithName:@”cropBottom”];
[cropT runAction:[SKAction moveByX:32 y:0 duration:2.5]];
[cropM runAction:[SKAction moveByX:-32 y:0 duration:2.5]];
[cropB runAction:[SKAction moveByX:32 y:0 duration:2.5]];
}
}
#define ColorHex(rgb) [UIColor colorWithRed:((rgb & 0xFF0000) >> 16)/255.0 green:((rgb & 0xFF00) >> 8)/255.0 blue:(rgb & 0xFF)/255.0 alpha:1.0]
– (UIColor *)color:(int)i {
if (i > 4) return nil;
int code[] = {0x10222B, 0x95AB63, 0xBDD684, 0xE2F0D6, 0xF6FFE0};
return ColorHex(code[i]);
}
@end