ios - 如何在 Swift 中截取全屏屏幕截图?

标签 ios swift uiimage screenshot

我找到了 this code :

func screenShotMethod() {
    //Create the UIImage
    UIGraphicsBeginImageContext(view.frame.size)
    view.layer.renderInContext(UIGraphicsGetCurrentContext())
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    //Save it to the camera roll
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}

我需要做什么才能将导航栏等所有其他元素添加到屏幕截图中?

最佳答案

与其直接抛出答案,不如让我解释一下您当前代码的作用以及如何修改它以捕获全屏。

UIGraphicsBeginImageContext(view.frame.size)

这行代码创建了一个与view 大小相同的新图像上下文。这里要注意的是,新的图像上下文view 的大小相同。除非您想捕获应用程序的低分辨率(非视网膜)版本,否则您应该改用 UIGraphicsBeginImageContextWithOptions。然后您可以传递 0.0 以获得与设备主屏幕相同的比例因子。

view.layer.renderInContext(UIGraphicsGetCurrentContext())

这行代码会将 View 的层渲染到当前图形上下文(这是您刚刚创建的上下文)中。这里要注意的是,只有 view(及其 subview )被绘制到图像上下文中。

let image = UIGraphicsGetImageFromCurrentImageContext()

这行代码根据绘制到图形上下文中的内容创建了一个 UIImage 对象。

UIGraphicsEndImageContext()

这行代码结束图像上下文。它正在清理(您创建了上下文,也应该将其删除。


结果是一个与 view 大小相同的图像,其中包含 view 及其 subview 。

如果您想将所有内容都绘制到图像中,那么您应该创建一个与屏幕大小相同的图像,并将屏幕上的所有内容都绘制到其中。实际上,您可能只是在谈论应用程序“关键窗口”中的所有内容。由于 UIWindowUIView 的子类,因此它也可以绘制到图像上下文中。

关于ios - 如何在 Swift 中截取全屏屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25448879/

相关文章:

objective-c - 如何使用回调函数访问 runAction 的目标?

ios - 更改 JSQMessagesViewController 的框架

cocoa - Swift 绑定(bind) KVO/KVC 问题

ios - 找不到体系结构 i386 Xcode 6.4 的符号

iphone - 转换字符串日期格式

ios - 为什么标签的文本没有更新?

iphone - 调整 UIImage 的内容

ios - 如何画四张四等分的圆圈?

ios - UIView 的 snapshotView 在没有任何内容的上下文中渲染/绘制

ios - 更改 View 变换会更改 iOS 7 上的 View 位置,但不会更改 ios8