ios – 如何通过代码从SKScene转到UIViewController?

我想要的只是当用户触摸skscene中的skspritenode时,它将转到不同的视图,如performseguewithidentifier.谢谢你的帮助.我可以发布代码,但它似乎是一个通用的问题所以我认为你不需要任何代码.顺便说一下,我已经想出了如何检测轻敲skspritenode.我一直在看这个很长一段时间,我很难过.请帮忙.

解决方法

您无法在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方法,如上一个替代方案中所述.

将viewController作为监听器添加到它的-viewDidLoad方法中:

[[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(showDifferentView) name:@"showDifferenView" object:nil];

然后,在要显示此viewController的场景中,使用以下行:

[[NSNotificationCenter defaultCenter] postNotificationName:@"showDifferentView" object:nil];

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...