插页式广告的示例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
{I}我试过这个:
[self.view.window.rootViewController requestInterstitialAdPresentation];
和X-Code抛出这个:
No visible @interface for 'UIViewController' declares the selector 'requestInterstitialAdPresentation'
这可能很简单,基本上我需要访问创建SKView和SKScene的ViewController对象,这样我就可以向该对象发送requestInterstitialAdPresentation
消息(并显示广告)。
答案 0 :(得分:3)
为什么不将实现requestInterstitialAdPresentation
的视图控制器实例传递给SKScene
实例?这样,你可以直接引用VC,而不必通过窗口,这似乎容易出错。
如果你打算采纳这个建议 - 不太了解你的代码库 - 我会猜测为场景创建一个委托接口并在视图控制器中实现它是有意义的。界面看起来像:
@protocol AdDelegate
- (BOOL)requestInterstitialAdPresentation;
@end
至于理解为什么你的根视图控制器没有实现requestInterstitialAdPresentation
,我想你最好的选择是调试应用程序并看看发生了什么。我怀疑你正在处理一个包装你的主VC的容器视图控制器,或者你呈现的场景显示在另一个窗口。
答案 1 :(得分:1)
您可以使用简单的通知与viewController进行通信。在viewController中:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestInterstitialAdPresentation) name:@"showAdd" object:nil];
然后,在您的场景中,只要您希望展示广告,就会发布通知。 在您的SKScene:
[[NSNotificationCenter defaultCenter] postNotificationName:@"showAdd" object:nil];
希望这有帮助