无法使用SpriteKit呈现场景

时间:2014-05-02 16:18:46

标签: ios sprite-kit skscene

我有两个SKScene SceneASceneB

我在每个场景中实现了两种方法(willMoveFromViewdidMoveToView)。

假设,我目前在SceneA,我想通过此代码块提交SceneB

SceneB *sceneB  = [SceneB sceneWithSize:self.view.bounds.size];
sceneB.scaleMode = SKSceneScaleModeAspectFill;
[self.view presentScene:sceneB];

当我呈现这个场景时,我可以看到:

sceneA willMoveFromView
sceneB didMoveToView
sceneA init
sceneB willMoveFromView
sceneA didMoveToView

最后我回到第一个SceneA!没有其他代码可以从SceneA推送SceneB。我不知道该怎么做,请帮忙

更新:

正如@ LearnCocos2D所说,每次我呈现场景时都会强制viewWillLayoutSubviews 我在viewWillLayoutSubviews中使用以下代码

呈现sceneA
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
SKView* skView = (SKView*)self.view;
SceneA *sceneA = [SceneA sceneWithSize:self.view.bounds.size];
sceneA.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:sceneA];
}

1 个答案:

答案 0 :(得分:0)

正如@ LearnCocos2D所说,viewWillLayoutSubviews被反复强制,而且每次调用它时我都会创建新的场景。所以我需要检查SKView.scene属性是否为零。这是代码:

-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
SKView* skView = (SKView*)self.view;
if(!skView.scene){
SceneA *sceneA = [SceneA sceneWithSize:self.view.bounds.size];
sceneA.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:sceneA];
}
}