好的,所以在对模拟器进行测试后发现这个问题只发生在实际设备上 ...我该如何解决这个问题?
<小时/> 我正在使用SpriteKit创建一个iOS应用程序并正在实现iAD。除了一件事,一切都或多或少地像我期望的那样。当我点击广告时,它会像我们预期的那样将我带到全屏广告,但当我关闭该广告时,当前视图会冻结,因为视觉上没有任何结果。我知道应用程序仍在运行,因为当我再次点击横幅广告并再次关闭时,游戏恢复正常,游戏在视觉上冻结了。这是在我的视图控制器类(iAD委托)中初始化横幅的方式:
self.canDisplayBannerAds = YES;
CGRect bannerFrame = CGRectMake(0, 20, scene.size.width, 50);
banner = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
banner.delegate = self;
banner.frame = bannerFrame;
[banner setAlpha:0];
[self.view addSubview:banner];
这些是加载方法,也在视图控制器类中:
- (void) bannerViewDidLoadAd:(ADBannerView *) bannerM
{
NSLog(@"Ad Loaded");
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[bannerM setAlpha:1];
[UIView commitAnimations];
}
- (void) bannerView:(ADBannerView *)bannerM didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"Ad Failed");
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[bannerM setAlpha:0];
[UIView commitAnimations];
}
我真的不明白这个问题或者为什么会发生这种情况......任何帮助都会受到赞赏!
谢谢,
StrongJoshua
编辑以下是横幅广告打开和关闭时调用的两种方法:
- (BOOL) bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
if(playing)
{
NSLog(@"Ad Pause");
SKView *v = (SKView *)self.view;
NSLog(@"2");
SKScene *s = (SKScene *)v.scene;
NSLog(@"3");
WBPlayScene *p = (WBPlayScene *) s;
NSLog(@"4");
[p.logic pause:YES];
NSLog(@"Done");
}
return YES;
}
- (void) bannerViewActionDidFinish:(ADBannerView *)banner
{
if(playing)
{
NSLog(@"Ad Unpause");
[((WBPlayScene *)((SKView *)self.view).scene).logic pause:NO];
}
}
固定
所有这些NSLog的原因是因为当我试图暂停它时游戏崩溃了。达到“2”后游戏崩溃,所以在SKScene *s = (SKScene *)v.scene;
。它给出了错误[UIView scene]: unrecognized selector sent to instance
,我不明白为什么......
解决方案:要解决此方面的问题,我将self.view
更改为self.originalContentView
,它获得了SKView,而不是广告横幅的视图。
非常感谢你的帮助!
答案 0 :(得分:0)
已解决:我必须删除通话以启用广告展示self.canDisplayBannerAds
,因为它干扰了我自己制作的横幅。