我在 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/