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