SpriteKitとiOSとの組み合わせをしたくセミナーに参加し教えていただいたことに基づきSpriteKitのページにViewとTextViewを配置した応用例を作成し確認してみました。これでSpriteKit機能を様々な分野に有効に使えると思います。
TopページにSpriteKitのViewを配置し動画さしUIKitのTextView、Goボタンを配置。(View Controller)
SecondページにはUIKitのTextView、Backボタンを配置(Second View Controller)
GoボタンからSecondViewController(本文)にSegueで紐ずけをしています。
Objective-C言語
ViewController.hを次のように変更してみてください。
#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>
@interface ViewController : UIViewController
@end
ViewController.mを次のように変更してみてください。
@propertyで動画を表示するViewをSKView view01にIBOutlet(インスタンス定義)しています。
SKView Self.view01を基にSKSceneを作成しシーンをオープンしています。
#import "ViewController.h"
#import "MyScene.h"
@interface ViewController()
// View01
@property (weak, nonatomic) IBOutlet SKView *view01;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// ビュー(SKView)の設定 view01
SKView * skView = (SKView *)self.view01;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
skView.showsPhysics = YES;
// シーンの作成、設定
SKScene * scene = [MyScene sceneWithSize:
skView.bounds.size];
// アスペクト比を維持して表示
scene.scaleMode = SKSceneScaleModeAspectFill;
// シーンのオープン
[skView presentScene:scene];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
// 次の画面ボタンアクション
- (IBAction)nextButton{
// Segueの呼び出し
[self performSegueWithIdentifier:@"goSecondViewSegue" sender:self];
}
// Segue画面遷移
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Segueの特定
if ( [[segue identifier] isEqualToString:@"goSecondViewSegue"] ) {
//SecondViewController *secondViewController = [segue destinationViewController];
//ここで遷移先ビューのクラスの変数receiveStringに値を渡している
//secondViewController.receiveString = sendString;
}
}
// バックExit
- (IBAction)mainViewReturnActionForSegue:(UIStoryboardSegue *)segue
{
}
@end
MyScene.hを次のように変更してみてください。
#import <SpriteKit/SpriteKit.h>
@interface MyScene : SKScene
@end
MyScene.mを次のように変更してみてください。
#import "MyScene.h"
@implementation MyScene
#pragma mark - initWithSize
// イニシャライザ
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
self.backgroundColor = [SKColor colorWithRed:0.15
green:0.15
blue:0.3
alpha:1.0];
// ノードの追加(ラベル)
{
// 山小屋画像生成
SKSpriteNode* iv;
iv = [SKSpriteNode spriteNodeWithImageNamed:@"images.png"];
//iv = [SKSpriteNode spriteNodeWithImageNamed:@"koyo.png"];
// 下からの(0,0)桜画像のセンターを指定 山小屋表示位置
iv.position = CGPointMake(160, 90);
// 山小屋表示
[self addChild:iv];
}
// 雪を降らす ノードの追加(エミッター)放射する
{
// パーティクルの参照
NSBundle *bnd = [NSBundle mainBundle];
NSString *pth = [bnd pathForResource:@"ParticleSnow" ofType:@"sks"];
SKEmitterNode *nod = [NSKeyedUnarchiver unarchiveObjectWithFile:pth];
nod.position = CGPointMake(CGRectGetMidX(self.frame),
CGRectGetMaxY(self.frame));
[self addChild:nod];
}
}
return self;
}
// FPS(Frame Per Second)毎に実行
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
}
@end
SecondViewController.hを次のように変更してみてください。
#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController
@end
SecondViewController.mを次のように変更してみてください。
#import "SecondViewController.h"
#import "ViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"セカンドページ");
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
簡単な書籍紹介アプリ
TopページでViewにSpriteKitの動画を嵌め込みTextView書籍紹介文を置きSecondページはiOSのViewControllerで書籍本文のTextViewを表示しています。
「本文」ボタンを押すと本文ページへ画面遷移します。「戻る」ボタンを押すとSpriteKitのTopページに戻ります。
▫️参考にしたページ
コメントをお書きください