【问题标题】:How to call method in ViewController from SKScene如何从 SKScene 调用 ViewController 中的方法
【发布时间】:2014-09-20 10:34:02
【问题描述】:

我在 ViewController.h 中创建了一个名为 - (void)showFullScreenAd 的方法。

我试图在我的场景中调用它。 我试过 [self.view.window.rootController showFullScreenAd]。找不到这个方法。

我试过 ViewController *vc = [[ViewController alloc] init]

它成功地完成了 NSLog "Interstitial Ad request"。但没有显示广告。

如果我直接在 ViewController.m - viewDidLoad 中使用该方法,它会 NSLog 相同的消息“Interstitial Ad request”并显示一个 interstitial Ad。

【问题讨论】:

  • 为什么不使用 NSNotification ?谷歌那个。此外,您没有为任何人提供足够的上下文或清晰度来有效地帮助您,因此您最终可能得不到太多帮助。您也可能不了解一些基本概念,因为您可能正在场景中创建新的 ViewController 实例,这绝不会帮助您与呈现场景的 ViewController 进行通信。
  • @prototypical 是的,我用谷歌搜索,发现它真的很有帮助。谢谢

标签: ios sprite-kit iad interstitial


【解决方案1】:

关于如何使用 iAd 的建议;

在 ViewController.m 中:

MyScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.viewController = self;

然后在您的 MyScene.h 中放入这些行:

#import "ViewController.h"

@property (nonatomic) ViewController *viewController;

也别忘了在 ViewController.m 中添加 iAd;

[self.view addSubview:adView];

【讨论】:

  • 我还没有尝试过,但我稍后会尝试。感谢您的帮助!
【解决方案2】:

我会使用通知:SKScene 对象向通知中心 (NSNotificationCenter) 发布系统范围的通知 (NSNotification),而目标视图控制器只是“注册”(即监听)该通知相同的通知并实现处理程序方法。这是 Objective-C/Cococa 中普遍存在的模式。

一些好处是:

  1. 它是可扩展的:如果将来你想在不同的场景中向视图控制器发送相同的消息,只需从新场景发布相同的通知:不需要包含标题并定义一个新的财产。只需要包含通知名称的定义。

  2. 视图控制器拥有视图,视图呈现场景。通过不引用场景中的视图控制器,您可以避免引用循环的风险,从而避免内存泄漏。

顺便说一句,这就是我在游戏中所做的。

【讨论】:

  • 非常感谢您提供的信息。我让它工作!之前没怎么关注 NSNotification。现在我发现它非常有用!
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
相关资源
最近更新 更多