Swift - 截图功能的实现1(通过扩展实现将UIView转成UIImage)
作者:hangge | 2018-07-09 08:10
截图分享功能在很多 App 中都可以看到,其关键在于如何将视图(View)转换成图片(Image)。本文演示如何实现这个操作。
(2)主视图控制器(ViewController.swift)代码如下:
(2)当然也可以使用 PhotoKit 来保存,具体可以参考我之前写的这篇文章:
1,效果图
(1)点击“截屏”按钮后,会对整个视图进行截屏,并将生成的图片显示在下方的 imageView 中。
(2)点击“转换单个组件”按钮后,只对分段选择控件进行截图,并将生成的图片显示在下方的 imageView 中。
2,样例代码
(1)为方便使用,我们首先对 UIView 进行扩展(UIView+.swift),增加一个将其转为 UIImage 的方法:
import UIKit extension UIView { //将当前视图转为UIImage func asImage() -> UIImage { let renderer = UIGraphicsImageRenderer(bounds: bounds) return renderer.image { rendererContext in layer.render(in: rendererContext.cgContext) } } }
(2)主视图控制器(ViewController.swift)代码如下:
import UIKit class ViewController: UIViewController{ //分段选择控件 @IBOutlet weak var segment: UISegmentedControl! //用于显示截屏后的图片 @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() } //整个屏幕截屏 @IBAction func buttonTapped1(_ sender: Any) { //将整个视图转为UIImage let image = UIApplication.shared.keyWindow!.asImage() //将转换后的UIImage显示在UIImageView中 self.imageView.image = image } //转换单个组件 @IBAction func buttonTapped2(_ sender: Any) { //将UISegmentedControl组件转为UIImage let image = self.segment.asImage() //将转换后的UIImage显示在UIImageView中 self.imageView.image = image } }
附:截屏并保存到系统相册中
(1)如果想把截图保存到相机胶卷中,直接使用 UIImageWriteToSavedPhotosAlbum() 方法即可:
//整个屏幕截屏 @IBAction func buttonTapped1(_ sender: Any) { //将整个视图转为UIImage let image = UIApplication.shared.keyWindow!.asImage() //将转换后的UIImage保存到相机胶卷中 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) }
(2)当然也可以使用 PhotoKit 来保存,具体可以参考我之前写的这篇文章:
全部评论(0)