您不能在 SKScene 中呈现 viewController,因为它实际上只在 SKView 上呈现。您需要一种向 SKView 的 viewController 发送消息的方法,而后者又会显示 viewController。为此,您可以使用委托或 NSNotificationCenter。
代表团
将以下协议定义添加到您的 SKScene 的 .h 文件中:
@protocol sceneDelegate <NSObject>
-(void)showDifferentView;
@end
并在接口中声明一个委托属性:
@property (weak, nonatomic) id <sceneDelegate> delegate;
然后,在您要显示共享屏幕的位置,使用此行:
[self.delegate showDifferentView];
现在,在 viewController 的 .h 文件中,实现协议:
@interface ViewController : UIViewController <sceneDelegate>
并且,在您的 .m 文件中,在呈现场景之前添加以下行:
scene.delegate = self;
然后在此处添加以下方法:
-(void)showDifferentView
{
[self performSegueWithIdentifier:@"whateverIdentifier"];
}
NSNotificationCenter
保留上一个替代方案中描述的 -showDifferentView 方法。
在它的 -viewDidLoad 方法中添加 viewController 作为通知的监听器:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showDifferentView) name:@"showDifferenView" object:nil];
然后,在场景中要显示此 viewController 的位置,使用以下行:
[[NSNotificationCenter defaultCenter] postNotificationName:@"showDifferentView" object:nil];