swift 截屏,长图处理

作者: 何以消摇 | 来源:发表于2018-07-18 17:53 被阅读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
    

    相关文章

      网友评论

        本文标题:swift 截屏,长图处理

        本文链接:https://www.haomeiwen.com/subject/ywhapftx.html