在 ios7 中拍摄状态栏的快照

Posted

技术标签:

【中文标题】在 ios7 中拍摄状态栏的快照【英文标题】:Taking snapshot of the status bar in ios7 【发布时间】:2013-12-27 20:55:28 【问题描述】:

我正在开发一个 cocos2d 游戏,我需要对状态栏进行快照。我通过以下语句发现ios7支持全屏视图捕获(包括状态栏):

UIView *screenshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];

我将此视图转换为 UIImage,然后使用“UIImageWriteToSavedPhotosAlbum”保存它。但是,保存的屏幕截图都是白色的。我该如何解决这个问题?

【问题讨论】:

只是状态栏?你需要那个干什么? 想要获取状态栏并使用它来创建更好的用户界面。 ???您知道您可以通过按住电源按钮然后点击主页按钮来截取屏幕截图。或者在模拟器上运行,使用 Cmd+Alt+4 抓取屏幕截图。并且这些状态栏图像在 Internet 上也很容易获得。另外,如果您在自己的应用程序中使用状态栏的任何元素而没有至少对其进行重大修改,那么您将侵犯 Apple 的版权。 【参考方案1】:

根据苹果文档,它说,该方法从渲染服务器捕获屏幕的当前视觉内容,并使用它们来构建新的快照视图,如果屏幕上的视图尚未提交到渲染服务器,快照的那部分将没有内容。所以这可能是个问题。

如果可以的话,你可以使用

UIView *screenshotView = [[self view] snapshotViewAfterScreenUpdates:NO];

或者有其他方式,请参考https://developer.apple.com/library/ios/qa/qa1703/_index.html以下文档

【讨论】:

UIScreen 也有一个similar API。 Returns a snapshot view based on the current screen contents. 抱歉我的无知,是的,它确实有 snapshotViewAfterScreenUpdates 方法!!!【参考方案2】:
UIView *screenshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO]; 

将返回一个无法转换为图像的 UIReplicateView。你必须使用

drawViewHierarchyInRect:afterScreenUpdates:

喜欢~

    - (UIImage *)snapshot:(UIView *)view

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

全部在苹果文档中 https://developer.apple.com/library/ios/qa/qa1817/_index.html

【讨论】:

以上是关于在 ios7 中拍摄状态栏的快照的主要内容,如果未能解决你的问题,请参考以下文章

在ios 7中将UI状态栏的背景颜色设置为黑色

自动布局 iOS7 -> 带状态栏的 iOS6

在iOS7中修改状态栏字体的颜色-b

在 Safari 和 Chrome 中更改 iOS 7 状态栏的颜色

模态视图的 iOS7 状态栏字体颜色

状态栏 iOS7