【问题标题】:iAD View Freezes On Ad CloseiAD 视图在广告关闭时冻结
【发布时间】: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 好的,这就是这个问题的主要解释,但第一个问题(我最初创建这篇文章的目的)的原因是什么,关于屏幕不刷新?

标签: ios objective-c xcode sprite-kit iad


【解决方案1】:

已解决:我不得不删除启用广告显示 self.canDisplayBannerAds 的调用,因为它干扰了我自己创建的横幅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多