6

SpriteKit は、ホーム ボタンを押すと、すべてのタイマーをクリーンアップして一時停止することになっています。

ただし、アクティブな SKView を表示しているときにホーム ボタンを 1 回タップすると、アプリがクラッシュすることがわかりました。これは、そのビューがユーザーによって既に一時停止されている場合でも発生します。

奇妙なことに、ホーム ボタンをダブルタップしてマルチタスク ビューに移動すると、すべて正常に動作します。

フォローアップ 注:シミュレーターは両方の状況で完全に動作し、クラッシュは発生しません

SpriteKit でこの問題が発生している人はいますか?

原因/解決策は見つかりましたか?

4

4 に答える 4

10

私は同じ問題を抱えていました。アプリがバックグラウンドに移動する前に、ViewController でルート SKView を手動で一時停止して解決しました。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view (already setup as SKView via storyboard)
    SKView * skView = (SKView *)self.view; 

    // Create and configure the scene.
    SKScene *scene = [Menu sceneWithSize:CGSizeMake(skView.bounds.size.height, skView.bounds.size.width)];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [skView presentScene:scene];
    [[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(appWillEnterBackground)
    name:UIApplicationWillResignActiveNotification
    object:NULL];
}

- (void)appWillEnterBackground
{
    SKView *skView = (SKView *)self.view;
    skView.paused = YES;
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(appWillEnterForeground)
    name:UIApplicationWillEnterForegroundNotification
    object:NULL];
}

- (void)appWillEnterForeground
{
    SKView * skView = (SKView *)self.view;
    skView.paused = NO;
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(appWillEnterBackground)
    name:UIApplicationWillResignActiveNotification
    object:NULL];
}
于 2014-01-06T02:30:55.437 に答える
0

UICollectionView で同様の一貫性のない動作が発生しました。その場合、Storyboard を介して (プログラムではなく) オブジェクトをインスタンス化すると、問題が解決しました。

直感で、今朝試してみたらビオラ、成功!

そのため、ストーリーボードは作成時に SKView を使用していくつかの魔法を実行しているように見えますが、これは私たちには知られていないため、ホーム ボタンを押すと適切に終了することができます。イライラしますが、少なくとも今は機能しています。

于 2013-11-05T15:32:14.663 に答える