ios - iAd/google 插页式弹出窗口后应用程序卡住

标签 ios cocos2d-iphone iad interstitial

我在 cocos2d(版本 3.1.0)中遇到了一个非常奇怪的插页式广告问题这是我用来加载两个插页式广告的代码。

- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
    [interstitial presentFromRootViewController:[CCDirector sharedDirector]];
    interstitial.delegate = nil;
    interstitial = nil;
}
- (void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
    [interstitialAd presentFromViewController:[CCDirector sharedDirector]];

}

一切看起来都很好并且工作正常,直到您在插页弹出之前将手指放在显示屏上,然后当您取消触摸(松开手指)并关闭弹出窗口时,应用程序变得无响应,触摸处理程序会根本不起作用,您必须重新启动应用程序。我苦苦挣扎了几个小时,但没有成功找到问题的根源。会不会是 CCDirector 停止和启动动画方法?

最佳答案

我找到了解决该错误的方法。我所做的是在显示 google/iAD 插页式广告之前禁用响应管理器,您可以看到下面的方法。

- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
    [[[CCDirector sharedDirector]responderManager]setEnabled:false];
    [interstitial presentFromRootViewController:[CCDirector sharedDirector]];
    interstitial.delegate = nil;
    interstitial = nil;
}
- (void)interstitialAdDidLoad:(ADInterstitialAd *)interstitialAd {
    [[[CCDirector sharedDirector]responderManager]setEnabled:false];
    [interstitialAd presentFromViewController:[CCDirector sharedDirector]];
}

之后,我通过输入以下代码在 CCDirectorIOS.m 文件的 - (void) startAnimation 中再次启用它。

if (![[self responderManager]isEnabled]) {
        [[self responderManager]setEnabled:true];
}

我知道这不是一个优雅的解决方案,因为直接更改库代码并不总是一个好主意,但我找不到任何其他替代方案。我认为这是一个 cocos2d 错误,但我不确定,也许更有经验的人可以指出确切的问题。我不知道这个错误是否存在于最新的 cocos2d 版本中。

编辑:此行为也出现在最新版本中。

关于ios - iAd/google 插页式弹出窗口后应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561749/

相关文章:

iphone - 效果只在模拟器中工作

ios - 类型 'Double' 没有成员 'random'

ios - 如何在xcode中观察变量值随时间的变化

iOS - 从文档目录中的包加载 xib

ios - 将NSMutableDictionary转换为NSArray的最简单方法

ios - 使用选取器 View 的 Cocos2d 主菜单

iPhone游戏加载/保存/配置关卡

ios - Game Over Class 上的 iAd 横幅实现

iphone - iAd AdBanner 内存泄漏问题(应用程序崩溃)

ios - 在不使用 Apple 的 iAd 系统的情况下在 iPhone 应用程序中显示广告是否合法