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)