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 场景中引用当前的 Viewcontroller