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 冻结游戏画面的主要内容,如果未能解决你的问题,请参考以下文章