swift 截屏,長圖處理

起因:

公司項目需要截圖,截長圖

問題:

如何截圖,截長圖,網上的資料往往不是太長,就是沒解決問題,甚至有不少bug。

解決辦法

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

1、截圖

import UIKit
extension UIView {
    /// 截屏Image
    var captureImage: UIImage? {
        
        // 參數①:截屏區(qū)域  參數②:是否透明  參數③:清晰度
        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("保存成功!")
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網絡請求組件 FMDB本地數據庫組件 SD...
    陽明AI閱讀 16,210評論 3 119
  • 發(fā)現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,407評論 4 61
  • 一直以為自己是一個左右不定難以選擇的人,還老是拿天秤座這個幌子來自我安慰!經歷了很多事,也錯過了很多事,再回頭來看...
    小靈通1046閱讀 239評論 0 0
  • 孤飛白羽獨悲惋,暮雨霏霏淚自流。 顛沛光陰愁作伴,漂泊歲月苦同游。 朝思夜想家鄉(xiāng)土,掛肚牽腸父母裘。 世事滄桑誰可...
    明小城閱讀 327評論 0 3
  • 今天上班在等公交車時,看到一對母子,男孩子大概7、8歲的樣子,穿著妮子上衣,下身穿牛仔褲,雙眼皮、大眼睛,高高的鼻...
    靜待花開之暢暢閱讀 184評論 0 1

友情鏈接更多精彩內容