iAd 冻结游戏画面

Posted

技术标签:

【中文标题】iAd 冻结游戏画面【英文标题】:iAd freezes game's scene 【发布时间】:2014-04-08 17:12:13 【问题描述】:

我正在使用 SpriteKit 开发游戏。我在场景视图中显示 iAd。当触摸广告视图中的广告时,广告会出现,但是,如果我交叉(X)/关闭广告,游戏中的场景将被冻结。当广告出现和消失时,我不会暂停场景或对事件做任何事情。如果我再次触摸广告(现在这是第二次冻结场景)并返回场景,场景会解冻,一切都开始按预期工作(奇怪地)。我不确定 iAd 或我的应用的问题出在哪里?

// Method is called when the iAd is loaded.
-(void)bannerViewDidLoadAd:(ADBannerView *)banner 
    NSLog(@"Banner did load");
    [self animateAdBanner];


-(void) animateAdBanner

if(iAdsEnable)

    [UIView animateWithDuration:6 delay:8
        options:UIViewAnimationOptionAllowUserInteraction
        animations:^
            [self.adBanner setAlpha:0.85];
        
        completion:^(BOOL finished)
            if(finished)
             //[self.adBanner setAlpha:0.7];
            

        ];





【问题讨论】:

我可以看看你在哪里创建你的bannerview,也许还有你的viewcontroller viewdidload? 我在“ViewDidLoad”中什么也没做。横幅视图是使用“故事板”而非编程方式创建的。 在设备(iPhone 5、ios 7.1)上检测到该行为。在模拟器中,一切正常。 【参考方案1】:

根据 Apple 的 ADBannerViewDelegate 协议参考:

bannerViewActionShouldBegin:willLeaveApplication:

如果 willLeave 参数为 YES,那么您的应用程序将在此方法返回后不久移至后台。在这种情况下,您的方法实现不需要执行额外的工作。如果 willLeave 设置为 NO,则触发的动作将覆盖应用程序的用户界面以显示广告动作。尽管您的应用程序继续正常运行,但此方法的实现应禁用在操作执行时需要用户交互的活动。例如,游戏可能会暂停其游戏,直到用户看完广告。

基本上意味着当你的游戏被推到后台时,游戏会暂停。

当横幅视图完成其操作时,代理还有另一种方法来通知您:

bannerViewActionDidFinish:

讨论 如果您的委托在允许操作运行之前暂停了活动,它应该在调用此方法时恢复这些活动。

您似乎可以使用上述委托方法来实现您自己的暂停/取消暂停,或者您可以使用场景中的 NSNotification 在您的应用分别进入后台和前台时暂停/取消暂停。

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(pause)
name:UIApplicationWillResignActiveNotification
object:nil];

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(unPause)
name:UIApplicationWillEnterForegroundNotification
object:nil];

来源: iAd Framework Reference 和 ADBannerViewDelegate Protocol Reference

【讨论】:

以上是关于iAd 冻结游戏画面的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同的 SpriteKit 场景中显示 iAd 横幅

iAD 视图在广告关闭时冻结

游戏循环完全冻结了我的程序

首次播放动画时游戏冻结

当 Unity 中的生命被移除时,游戏会冻结 [重复]

box2d世界步骤永不回归(游戏冻结)