返回 导航

Swift

hangge.com

Swift - 截图功能的实现1(通过扩展实现将UIView转成UIImage)

作者:hangge | 2018-07-09 08:10
    截图分享功能在很多 App 中都可以看到,其关键在于如何将视图(View)转换成图片(Image)。本文演示如何实现这个操作。

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)

回到顶部