我有两个SKScene SceneA
,SceneB
。
我在每个场景中实现了两种方法(willMoveFromView
,didMoveToView
)。
假设,我目前在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
中使用以下代码
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
SKView* skView = (SKView*)self.view;
SceneA *sceneA = [SceneA sceneWithSize:self.view.bounds.size];
sceneA.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:sceneA];
}
答案 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];
}
}