iOS8からSKViewのpausedが勝手に変更される件
Swiftでの解決方法は見つかるんだけど、
Objective-Cの場合はどうしたら良いの?ということで、
まずは、状況の再現から。
とりあえず、適当にプロジェクトを作成する。
TemplateはGameで、
LanguageはObjective-C、
Game TechnologyはSpriteKit。
次に、新規にCocoa Classを追加して、SKView
を継承する。
こんな感じ。
FOOGameView.h
#import <SpriteKit/SpriteKit.h> @interface FOOGameView : SKView @end
FOOGameView.m
#import "FOOGameView.h" @implementation FOOGameView - (void)setPaused:(BOOL)newValue { NSLog( @"setPaused newValue: %d", newValue ); super.paused = newValue; } @end
次に、GameViewController.mを書き換える。
#import "GameViewController.h" #import "FOOGameView.h" // <-- 追加 #import "GameScene.h" //(省略) @implementation GameViewController - (void)viewDidLoad { [super viewDidLoad]; // Configure the view. FOOGameView * skView = (FOOGameView *)self.view; // <-- 変更 skView.showsFPS = YES; skView.showsNodeCount = YES; /* Sprite Kit applies additional optimizations to improve rendering performance */ skView.ignoresSiblingOrder = YES; // Create and configure the scene. GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"]; scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene. [skView presentScene:scene]; } //(省略)
それと、もう一つ。
Main.storyboardを選択して、黒い部分を選んで、
Custom ClassのClassに先ほど追加したクラスを設定する。
今回の場合だと、SKView
からFOOGameView
に書き換える。
さて、再現してみる。
iPhone 5s(8.3)の場合は、
Homeボタンを押したり、アイコンをタップしたりするとログが出力され、
iPhone 5s(7.1)の場合は、ログが出力されない。(*1)
さて、どうしたものか・・・。
おしまい。
(*1) Preferences...
のDownloads
タブを選んで、iOS 7.1 Simulator
をインストールする必要がある
Leave a Comment