iAD 视图在广告关闭时冻结
Posted
技术标签:
【中文标题】iAD 视图在广告关闭时冻结【英文标题】:iAD View Freezes On Ad Close 【发布时间】:2014-03-23 18:28:59 【问题描述】:好的,所以在模拟器上测试后发现这个问题只发生在实际设备上...我该如何解决这个问题?
我正在使用 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];
我真的不明白这个问题或它为什么会发生......任何帮助将不胜感激!
谢谢, 强约书亚
EDIT 以下是横幅广告打开和关闭时调用的两个方法:
- (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];
已修复
所有这些 NSLogs 的原因是当我尝试暂停游戏时游戏崩溃了。到达“2”后游戏崩溃,所以在SKScene *s = (SKScene *)v.scene;
。它给出了错误[UIView scene]: unrecognized selector sent to instance
,我不明白为什么......
解决方案:为了解决这个附带问题,我将 self.view
更改为 self.originalContentView
,它获得了 SKView 而不是广告横幅的视图。
非常感谢您的帮助!
【问题讨论】:
你实现protocol
的方法bannerViewActionShouldBegin:willLeaveApplication:
和bannerViewActionDidFinish:
了吗?
@lootsch 是的,我正在尝试在用户实际进入游戏时使用它们暂停游戏。如果我正确地实现了它们,我会发现它们,所以我会将它们添加到问题中(以及我遇到的一个可能很小的问题)。
我认为问题在于,self.view
不是SKView
(如预期的那样)而是UIView
。试着检查一下。这应该可以暂停您的游戏。
最近几周我们反复遇到这种情况:iAD 视图已将您的 SKView 的 viewController.view 替换为 iAd 横幅视图。我不知道为什么会发生这种情况,但 iAd 设置出现问题似乎是一个反复出现的问题。
@lootsch 好的,这就是这个问题的主要解释,但第一个问题(我最初创建这篇文章的目的)的原因是什么,关于屏幕不刷新?
【参考方案1】:
已解决:我不得不删除启用广告显示 self.canDisplayBannerAds
的调用,因为它干扰了我自己创建的横幅。
【讨论】:
以上是关于iAD 视图在广告关闭时冻结的主要内容,如果未能解决你的问题,请参考以下文章