Gio*_*era 23 iphone screenshot image ios swift
如何通过代码(在Swift中)从我的屏幕截取屏幕截图并保存?我可以截取屏幕并将其保存为图像吗?
我看了,我看到了这段代码,但我不能使用它(我认为),因为它没有做任何事情.
var screen = 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)
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 41
使用Swift 4/iOS 10.3,您可以选择以下方法之一来解决您的问题.
以下代码显示如何截取屏幕截图并将其保存在设备相册中:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,此代码的结果将是.JPG图像.另请注意,导航栏和状态栏不会出现在最终图像中.
从iOS 10开始,作为上一代码的替代品,您可以使用以下代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
如果要拍摄包含导航栏(但不是状态栏)的屏幕截图,可以使用以下代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
从iOS 10开始,作为上一代码的替代品,您可以使用以下代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
从iOS 10开始,为了防止您的应用在调用screenshot(_:)方法时崩溃,您需要将密钥添加NSPhotoLibraryUsageDescription到项目的Info.plist文件中:
<key>NSPhotoLibraryUsageDescription</key>
<string>Some description to explain why access is required</string>
Run Code Online (Sandbox Code Playgroud)
只需这几行代码就可以获得View的screenShot :(刚刚测试过)
UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0);
self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
var image:UIImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.imgView.image = image;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20155 次 |
| 最近记录: |