iOS Sprite Kit 中 SKScene 中的插页式 iAd

Posted

技术标签:

【中文标题】iOS Sprite Kit 中 SKScene 中的插页式 iAd【英文标题】:Interstitial iAd within SKScene in iOS Sprite Kit 【发布时间】:2014-02-19 00:23:39 【问题描述】:

插页式广告的示例 iAd 代码使用主 ViewController 来呈现全屏插页式广告。

但是,我希望能够在我的 ios Sprite Kit 游戏中从 SKScene 触发广告。

我可以在主视图控制器 (ViewController.m) 中轻松地这样做:

[self requestInterstitialAdPresentation];

但是,我尝试访问在viewDidLoad 方法中设置场景的根视图控制器:

SKView * skView = (SKView *)self.view;
SKScene * scene = [SKScene sceneWithSize:skView.bounds.size];
[skView presentScene:scene];

SKScene.m 我试过这个:

[self.view.window.rootViewController requestInterstitialAdPresentation];

X-Code 抛出这个:

No visible @interface for 'UIViewController' declares the selector 'requestInterstitialAdPresentation'

这可能很简单,基本上我需要访问创建 SKView 和 SKScene 的 ViewController 对象,以便我可以向该对象发送requestInterstitialAdPresentation 消息(并显示广告)。

【问题讨论】:

您是否尝试过像这样投射视图控制器? [(ViewController *)self.view.window.rootViewController requestInterstitialAdPresentation]; 【参考方案1】:

为什么不将实现requestInterstitialAdPresentation 的视图控制器实例传递给SKScene 实例?这样一来,就可以直接引用VC,而不必通过窗口,这似乎容易出错。

如果您要接受这个建议——在不太了解代码库的情况下——我会大胆猜测,为场景创建一个委托接口并在视图控制器中实现它可能是有意义的。界面看起来像:

@protocol AdDelegate
- (BOOL)requestInterstitialAdPresentation;
@end

就理解为什么你的根视图控制器没有实现requestInterstitialAdPresentation 而言,我想你最好的选择是调试应用程序并查看发生了什么。我的怀疑是您正在处理包装主 VC 的容器视图控制器,或者您正在呈现的场景显示在不同的窗口中。

【讨论】:

【参考方案2】:

您可以使用简单的通知与您的 viewController 进行通信。在您的 viewController 中:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestInterstitialAdPresentation) name:@"showAdd" object:nil];

然后在您希望展示广告时在您的场景中发布通知。 在您的 SKScene 中:

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

希望对你有帮助

【讨论】:

迄今为止最简单的方法。

以上是关于iOS Sprite Kit 中 SKScene 中的插页式 iAd的主要内容,如果未能解决你的问题,请参考以下文章

在 Sprite Kit 中组合多个 SKScene

ios Sprite Kit 截图?

如何从 Sprite Kit 场景中引用当前的 Viewcontroller

在 Sprite Kit 中暂停 SKPhysicsWorld

Sprite Kit 的辅助功能(画外音)

使用 Swift 在 sprite kit 中的多个场景中重用相同的 sprite 节点