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

标签 ios uiviewcontroller sprite-kit segue skscene

如果当用户触摸 skscene 中的 skspritenode 时,它​​会转到不同的 View ,如 performseguewithidentifier。谢谢你的帮助。我可以发布代码,但这似乎是一个通用问题,所以我认为您不需要任何代码。顺便说一句,我已经想出了如何检测 skspritenode 的敲击。我已经看了很长时间了,我很难过。请帮忙。

最佳答案

您不能从 SKScene 中呈现 viewController,因为它实际上只在 SKView 上呈现。您需要一种方法来向 SKView 的 viewController 发送消息,后者将呈现 viewController。为此,您可以使用委托(delegate)或 NSNotificationCenter。

委派

将以下协议(protocol)定义添加到您的 SKScene 的 .h 文件中:

@protocol sceneDelegate <NSObject>
-(void)showDifferentView;
@end

并在接口(interface)中声明一个委托(delegate)属性:

@property (weak, nonatomic) id <sceneDelegate> delegate;

然后,在您要显示共享屏幕的位置,使用以下行:

[self.delegate showDifferentView];

现在,在您的 viewController 的 .h 文件中,实现协议(protocol):

@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];

关于ios - 如何通过代码从 SKScene 转到 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549255/

相关文章:

ios - Payu Swift 集成中 PayUCreateRequest 的 createRequest() 函数中的 NSURL 问题

ios - Swift 委托(delegate)永远不会被调用

ios - 在 UiViewController 中使用自定义选项卡显示多个 View

objective-c - 在 UIViewController 的 viewDidUnload 中释放 IBOutlets?

ios - SpriteKit 中的碰撞

ios - 就地排序 Objective-C 数组

android - 设备横向 View 中的中心导航

ios - 快速方向改变 IOS

swift - SKLabel 避免,使用 TextKit 而不是创建 SKTexture?

ios - 在 Swift 中检测两个对象之间的碰撞