swiftSwift学习之旅Swift编程

swift 截屏,长图处理

2018-07-18  本文已影响4人  何以消摇

起因:

公司项目需要截图,截长图

问题:

如何截图,截长图,网上的资料往往不是太长,就是没解决问题,甚至有不少bug。

解决办法

下面是我找到最精简的方法

1、截图

import UIKit
extension UIView {
    /// 截屏Image
    var captureImage: UIImage? {
        
        // 参数①:截屏区域  参数②:是否透明  参数③:清晰度
        UIGraphicsBeginImageContextWithOptions(frame.size, true, UIScreen.main.scale)
        layer.render(in: UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        
        UIGraphicsEndImageContext()
        return image
    }
}

调用

let image = view.captureImage

2、长图、大图

用上个方法可以截普通的view,但是scrollView,tableView不行,
截长屏需要改变frame的size为contentSize进行截图,操作之后设置回来即可

import UIKit
extension UIScrollView {
    
    /// 截长屏Image
    var captureLongImage: UIImage? {
        
        var image: UIImage? = nil
        UIGraphicsBeginImageContext(contentSize)
        
        let savedContentOffset = contentOffset
        let savedFrame = frame
        
        contentOffset = .zero
        frame = CGRect(x: 0, y: 0,
                       width: contentSize.width,
                       height: contentSize.height)
        
        UIGraphicsBeginImageContextWithOptions(
            CGSize(width: contentSize.width,
                   height: contentSize.height),
            false,
            0.0)
        
        layer.render(in: UIGraphicsGetCurrentContext()!)
        image = UIGraphicsGetImageFromCurrentImageContext()
        
        contentOffset = savedContentOffset
        frame = savedFrame
        
        UIGraphicsEndImageContext()
        return image
        
    }
}

调用

let longImage = tableView.captureLongImage
上一篇 下一篇

猜你喜欢

热点阅读