swift 截屏,长图处理

起因:

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

问题:

如何截图,截长图,网上的资料往往不是太长,就是没解决问题,甚至有不少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
        let savedContentOffset = contentOffset
        let savedFrame = frame
        
        contentOffset = .zero
        frame = CGRect(x: 0, y: 0,
                       width: contentSize.width,
                       height: contentSize.height)
        
        UIGraphicsBeginImageContext(frame.size)
        UIGraphicsBeginImageContextWithOptions(
            CGSize(width: frame.size.width,
                   height: frame.size.height),
            false,
            UIScreen.main.scale)
        layer.render(in: UIGraphicsGetCurrentContext()!)
        image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        print("contentSize == \(contentSize)")
        contentOffset = savedContentOffset
        frame = savedFrame
        return image
        
    }
}

调用

let longImage = tableView.captureLongImage

保存图片

guard let image = tableView.captureLongImage else {
      return
}
 writeImageToAlbum(image)
fileprivate func writeImageToAlbum(_ image: UIImage) {
        MQProgressHUD.showLoading()
        UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(image:didFinishSavingWithError:contextInfo:)), nil)
}
    
@objc fileprivate func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafeRawPointer) {
        if let _ = error as NSError? {
            print("保存失败,请重试")
        } else {
            print("保存成功!")
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,031评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,294评论 4 61
  • 一直以为自己是一个左右不定难以选择的人,还老是拿天秤座这个幌子来自我安慰!经历了很多事,也错过了很多事,再回头来看...
    小灵通1046阅读 215评论 0 0
  • 孤飞白羽独悲惋,暮雨霏霏泪自流。 颠沛光阴愁作伴,漂泊岁月苦同游。 朝思夜想家乡土,挂肚牵肠父母裘。 世事沧桑谁可...
    明小城阅读 312评论 0 3
  • 今天上班在等公交车时,看到一对母子,男孩子大概7、8岁的样子,穿着妮子上衣,下身穿牛仔裤,双眼皮、大眼睛,高高的鼻...
    静待花开之畅畅阅读 173评论 0 1