ios7 - iOS 多任务切换器系统镜像与应用程序镜像差异解决方法

标签 ios7 multitasking screen-capture

在我看来,系统采用的屏幕截图与我的应用程序采用的屏幕截图不同 applicationWillResignActive .

令我惊讶的是,系统拍摄的图像之间有大约 0.6 秒的延迟 (b) 以及游戏拍摄的图片 (d) .如果系统需要在 applicationWillResignActive 之前进行屏幕捕获,这有点有意义。 ,但对于具有快速移动物体的游戏,玩家很容易注意到这一点。

我该如何解决这个问题?

以下是播放器执行的步骤以及它如何导致这种差异:

enter image description here

(a) 玩家在玩游戏时会按一下主页按钮。 (b) 系统屏幕截图已完成。 (c) 玩家点击游戏图标。 (d) 游戏启动时截屏 applicationWillResignActive . (e) 游戏暂停显​​示快速移动物体的差异。

最佳答案

我相信这是因为你的游戏渲染不在主线程上(当然它不应该在主线程上),所以当 applicationDidEnterBackground/applicationWillResignActive返回时,系统立即从视频卡的缓冲区中截取屏幕截图。

此时,您的游戏循环线程仍在运行,因此它可能会在暂停之前更新一些帧。

我不知道你是如何实现你的游戏循环的,但你可以试试这个:

applicationDidEnterBackground/applicationWillResignActive ,放置一个全局信号量( dispatch_semaphore_t )并阻塞主线程,在您的游戏循环中,观察信号量,如果存在,则暂停您的游戏循环,然后向信号量发出信号。

这将确保在您的游戏暂停后截取屏幕截图。

还要注意在 applicationWillResignActive 之后,系统会为任务切换器做快照,之后 applicationDidEnterBackground ,系统会在您下次应用进入前台时拍摄快照。

希望这会帮助你。

关于ios7 - iOS 多任务切换器系统镜像与应用程序镜像差异解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24635464/

相关文章:

objective-c - iOS 7 CoreBluetooth retrievePeripheralsWithIdentifiers 不检索

ios7 - iOS 7 UISearchDisplayController搜索栏消失

ios - 混淆线程和队列之间的技术术语

iphone - iOS:如何将不使用后台音频、Voip、GPS 的应用程序保留在后台?

android - 如何捕获android设备屏幕内容?

ios7 - 如何将 FPS 添加到 XCode 5 中的调试仪表?

ios - 如何覆盖后退导航项?

iOS 9 iPad 多任务处理 - 并排多任务处理,无需滑过

email - 如何使用 Corona SDK 发送截屏图像

macos - 获取 osx screencapture 终端工具来捕获两个屏幕