最乾淨的解決方案是聲明和實施協議,讓UIViewController
知道它應該對SKScene
中的更改做出反應。
@protocol MySceneDelegate <NSObject>
- (void)closeScene;
@end
@interface MyScene : SKScene
@property(nonatomic, strong) SKShapeNode *ball;
@property (weak) id <MySceneDelegate> delegate;
@end
視圖控制器,顯示現場應實行closeScene
方法,並設置本身作爲場景的代表。例如:
- (void)viewDidLoad
{
[super viewDidLoad];
// Configure the view.
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
// Create and configure the scene.
MyScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Set the delegate
[scene setDelegate:self];
// Present the scene.
[skView presentScene:scene];
}
然後在現場,你可以調用其設定爲一個委託視圖控制器的closeScene
方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
/* Called when a touch begins */
if ([_delegate respondsToSelector:@selector(closeScene)])
{
[_delegate performSelector:@selector(closeScene)];
}
}
希望它能幫助。
可能有助於此:http://stackoverflow.com/questions/19142632/how-to-perform-segue-from-within-a-skscene-layer-spritekit – nzs