Dyl*_*erg 7 uiviewcontroller ios segue sprite-kit skscene
我想要的只是当用户触摸skscene中的skspritenode时,它会转到不同的视图performseguewithidentifier
.谢谢你的帮助.我可以发布代码,但它似乎是一个通用的问题所以我认为你不需要任何代码.顺便说一下,我已经想出了如何检测轻敲skspritenode.我一直在看这个很长一段时间,我很难过.请帮忙.
您无法在SKScene中呈现viewController,因为它实际上仅在SKView上呈现.您需要一种方法将消息发送到SKView的viewController,而viewController又将呈现viewController.为此,您可以使用委托或NSNotificationCenter.
代表团
将以下协议定义添加到SKScene的.h文件中:
@protocol sceneDelegate <NSObject>
-(void)showDifferentView;
@end
Run Code Online (Sandbox Code Playgroud)
并在界面中声明一个委托属性:
@property (weak, nonatomic) id <sceneDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
然后,在您要显示共享屏幕的位置,使用以下行:
[self.delegate showDifferentView];
Run Code Online (Sandbox Code Playgroud)
现在,在viewController的.h文件中,实现协议:
@interface ViewController : UIViewController <sceneDelegate>
Run Code Online (Sandbox Code Playgroud)
并且,在.m文件中,在呈现场景之前添加以下行:
scene.delegate = self;
Run Code Online (Sandbox Code Playgroud)
然后在那里添加以下方法:
-(void)showDifferentView
{
[self performSegueWithIdentifier:@"whateverIdentifier"];
}
Run Code Online (Sandbox Code Playgroud)
NSNotificationCenter
保持-showDifferentView方法,如上一个替代方案中所述.
将viewController作为侦听器添加到它的-viewDidLoad方法中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showDifferentView) name:@"showDifferenView" object:nil];
Run Code Online (Sandbox Code Playgroud)
然后,在要显示此viewController的点的场景中,使用以下行:
[[NSNotificationCenter defaultCenter] postNotificationName:@"showDifferentView" object:nil];
Run Code Online (Sandbox Code Playgroud)