swift iOS中的屏幕截图? [英] Screenshot in swift iOS?
问题描述
有谁知道如何通过代码(在swift中)从我的屏幕截取屏幕截图并保存?
我可以截取屏幕并将其另存为图像吗?
Does anyone know how can I take screenshot from my screen by code (in swift) and save it? Can I take screenshot and save it as image?
我看了,我看到了这段代码,但我不能用它(我想),因为它没有做任何事情......
I've looked and I see this code, but I can't use it (I Think) because it doesn't do anything..
var screen:UIScreen = UIScreen.mainScreen()
snapshotVieww = screen.snapshotViewAfterScreenUpdates(false)
UIGraphicsBeginImageContextWithOptions(screen.bounds.size, false, 0);
snapshotVieww.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
provino = UIImageView(image: image)
先谢谢!
推荐答案
使用Swift 4 / iOS 10.3,您可以选择以下方法之一来解决问题。
With Swift 4 / iOS 10.3, you can choose one of the following ways in order to solve your problem.
以下代码显示如何截取屏幕截图并将其保存在设备相册中:
The following code shows how to take a screenshot and save it in the device photo album:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
UIGraphicsBeginImageContextWithOptions(view.frame.size, true, 0)
guard let context = UIGraphicsGetCurrentContext() else { return }
view.layer.render(in: context)
guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return }
UIGraphicsEndImageContext()
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
请注意,此代码的结果将是.JPG图像。另请注意,导航栏和状态栏不会出现在最终图像中。
Note that the result of this code will be a .JPG image. Also note that the navigation bar and the status bar will not appear in the final image.
从iOS 10开始,作为前一代码的替代,您可以使用代码下面:
Since iOS 10, as an alternative to the previous code, you can use the code below:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
let renderer = UIGraphicsImageRenderer(size: view.frame.size)
let image = renderer.image(actions: { context in
view.layer.render(in: context.cgContext)
})
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
2。截取iPhone窗口的屏幕截图
如果要拍摄包含导航栏(但不包括状态栏)的屏幕截图,可以使用以下代码:
2. Take a screenshot of an iPhone window
If you want to take a screenshot that includes the navigation bar (but not the status bar), you can use the following code:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
guard let layer = UIApplication.shared.keyWindow?.layer else { return }
UIGraphicsBeginImageContextWithOptions(layer.frame.size, true, 0)
guard let context = UIGraphicsGetCurrentContext() else { return }
layer.render(in: context)
guard let image = UIGraphicsGetImageFromCurrentImageContext() else { return }
UIGraphicsEndImageContext()
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
自iOS 10起,作为前一代码的替代,您可以使用以下代码:
Since iOS 10, as an alternative to the previous code, you can use the code below:
import UIKit
class ViewController: UIViewController {
/* ... */
@IBAction func screenshot(_ sender: UIBarButtonItem) {
//Create the UIImage
guard let layer = UIApplication.shared.keyWindow?.layer else { return }
let renderer = UIGraphicsImageRenderer(size: layer.frame.size)
let image = renderer.image(actions: { context in
layer.render(in: context.cgContext)
})
//Save it to the camera roll
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}
}
提醒
自iOS 10起,为了防止您的应用在调用屏幕截图(_ :)时崩溃
方法,你需要将密钥 NSPhotoLibraryUsageDescription
添加到你的项目中nfo.plist文件:
Reminder
Since iOS 10, in order to prevent your app from crashing when calling your screenshot(_:)
method, you need to add the key NSPhotoLibraryUsageDescription
to your project's Info.plist file:
<key>NSPhotoLibraryUsageDescription</key>
<string>Some description to explain why access is required</string>
这篇关于swift iOS中的屏幕截图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!