【问题标题】:iAd freezes game's sceneiAd 冻结游戏画面
【发布时间】: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)上检测到该行为。在模拟器中,一切正常。

标签: ios sprite-kit iad


【解决方案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 ReferenceADBannerViewDelegate Protocol Reference

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多