我正在寻找一种在iPhone上捕获屏幕截图的方法,其中包含顶级状态栏,我目前正在使用以下代码:
UIGraphicsBeginImageContext(self.view.bounds.size); //self.view.window.frame.size
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
上面的代码成功获取了iPhone UIView的屏幕截图,但不包括顶级状态栏(在它的位置只是一个空白的20px空间)。
答案 0 :(得分:11)
从iOS 7开始,您可以使用
执行此而不使用私有APIUIView *screenshotView = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];
请参阅我对这个问题的回答:
答案 1 :(得分:3)
您可以通过调用私有API UIGetScreenImage
来获取屏幕的全部内容。有关详细信息,请参阅我的previous answer至similar question。
答案 2 :(得分:1)
截至2009年10月8日,UIGetScreenImage的使用让我的应用被拒绝了! :(我不建议使用它。我相信Apple正在尝试清理所有应用程序并使它们符合新的3.x操作系统/ API。我正在寻找替代方案。如果有人有任何建议。视频API?
答案 3 :(得分:1)
为什么不将整个UIWindow渲染到图像上下文中,而不是使用私有API?在代码中用self.view
替换self.view.window
可能就足够了。
您还可以将当前窗口作为[UIApplication sharedApplication]
实例的属性。状态栏可能位于单独的窗口层上,也许您必须按顺序渲染窗口。
这样的事情:
UIGraphicsBeginImageContext(self.view.window.frame.size);
for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
[window.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage *screenshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
无论如何,您可能不需要使用私有API。