문제

I have two SKScene SceneA,SceneB.

I have implemented two methods(willMoveFromView,didMoveToView) in each scene.

Assume, I am currently in SceneA and i want to present SceneB via this code block:

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

When I present this scene, I can see this:

sceneA willMoveFromView
sceneB didMoveToView
sceneA init
sceneB willMoveFromView
sceneA didMoveToView

And finally I return to first SceneA ! There is no other code that pushes SceneA from SceneB . I don't know what to do, please help

UPDATE:

As @LearnCocos2D says, viewWillLayoutSubviews is forced every time I present scene And I present sceneA in viewWillLayoutSubviews with following code

-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
SKView* skView = (SKView*)self.view;
SceneA *sceneA = [SceneA sceneWithSize:self.view.bounds.size];
sceneA.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:sceneA];
}
도움이 되었습니까?

해결책

As @LearnCocos2D says, viewWillLayoutSubviews is forced repeatedly , And I used to create new scene everytime it has been called. So I need to check if SKView.scene property is not nil. Here is the code:

-(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];
}
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top