我正在使用root viewcontroller
显示几个标签来跟踪分数等,这很正常。但是,根视图控制器在加载场景时不会立即响应来自场景的消息。
情况是这样的:UIViewController
呈现SKView
我在其上初始化MyScene
(正常的SpriteKit内容)。我立即在MyScene中加载json-file
的级别,其中包含该特定级别上可能的点数。当级别加载完成后,我尝试将可能的点数发送回我的根视图控制器,因此它可以在标签中显示它。
我尝试在myScene.mainViewController = self
上的viewWillLayoutSubviews
设置属性ViewController
,然后仅[self.mainViewController setInitialScore:_bgLayer.maxScore];
,但方法setInitialScore
永远不会触发。我也尝试使用NSNotificationCenter
,但这也不起作用。
但是,每当玩家收集一个点(稍后发生)时,我会在self.mainViewController
中调用一个方法,并且该方法正常。所以问题似乎是ViewController没有完成加载或其他东西,所以它没有立即响应。
我怎么解决这个问题?
编辑1: 以下是按要求提供的一些代码:
ViewController.m
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
SKView *skView = (SKView *)self.view;
if (!skView.scene) {
skView.showsFPS = YES;
skView.showsNodeCount = YES;
// Create and configure the scene.
MyScene* scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
scene.mainViewController = self;
// Present the scene.
[skView presentScene:scene];
self.numLives = bStartNumLives;
self.score = 0;
[self resetLabels];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setInitialRings:) name:@"setInitialRings" object:nil];
}
}
- (void)setInitialRings:(NSNotification *)notification {
NSLog(@"Initial rings set");
NSDictionary *userInfo = [notification userInfo];
NSInteger rings = [(NSNumber *)[userInfo objectForKey:@"rings"] integerValue];
self.numRings = rings;
[self resetLabels];
}
MyScene.m
- (void)createWorld {
_bgLayer = [self createScenery];
NSLog(@"world created setting initial rings");
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:_bgLayer.numRings] forKey:@"rings"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"setInitialRings" object:userInfo];
_worldNode = [SKNode node];
[_worldNode addChild:_bgLayer];
[self addChild:_worldNode];
self.anchorPoint = CGPointMake(0.5, 0.5);
_worldNode.position = CGPointMake(-_bgLayer.layerSize.width / 2, -_bgLayer.layerSize.height / 2);
}
从这段代码中可以看出,我正在尝试使用NSNotificationCenter
。我也尝试手动调用[self.mainViewController setInitialRings:_bgLayer.numRings];
(但更改setInitialRings
- 方法取整数而不是通知。)