swift之Mac中NSView视图里的截图【ScrollView中的内容截图】

import Foundation

import Cocoa

 在视图中的方法

extension NSView {

    /****1.

     在drawRect方法中绘制

    使用Quartz2D绘图函数在视图上绘制圆角矩形

 ****/

    override func draw(_ dirtyRect: NSRect) {

        super.draw(dirtyRect)

        NSColor.blue.setFill()

        let frame = self.bounds

        let path = NSBezierPath()

        path.appendRoundedRect(frame, xRadius: 10, yRadius: 10)

        path.fill()

    }

    

    /***2

     在drawRect方法之外实现绘制,需要使用lockFocus方法锁定视图,完成绘图后在执行unlockFocus解锁

     drawRect方法与lockFocus锁定方式不能同时使用

     ***/

    func drawViewShape(){

        self.lockFocus()

        let text: NSString = "RoundedRect"

        let font = NSFont(name: "Palatino-Roman", size: 12)

        let attrs = [NSAttributedString.Key.font: font,NSAttributedString.Key.foregroundColor:NSColor.red]

        let location = NSPoint(x: 50, y: 50)

        text.draw(at: location, withAttributes: attrs)

        self.unlockFocus()

    }

    /****3

     视图截屏

     ***/

    func saveSelfAsImage() {

        self.lockFocus()

        let image = NSImage(data: self.dataWithPDF(inside: self.bounds))

        self.unlockFocus()

        let imageData = image!.tiffRepresentation

        let fileManager = FileManager.default

        //制定文件路径

        let path = "/Users/.../Documents/myCapture.png"

        fileManager.createFile(atPath: path, contents: imageData, attributes: nil)

        //保存结束后Finder中自动定位到文件路径

        let fileUrl = URL(fileURLWithPath: path)

        NSWorkspace.shared.activateFileViewerSelecting([fileUrl])

        

  }

        //如果视图比较大,是带滚动条的大视图,则按下面的方法处理可以保证获得整个滚动页面的截图

    func saveScrollViewAsImage() {

        //

        let pdfdata = self.dataWithPDF(inside: self.bounds)

//        self.dataWithEPS(inside: self.bounds)  ????

        let imageRep = NSPDFImageRep(data: pdfdata)!

        let count = imageRep.pageCount

        for i in 0..<count {

            imageRep.currentPage = i

            let tempImage = NSImage()

            tempImage.addRepresentation(imageRep)

            let rep = NSBitmapImageRep(data: tempImage.tiffRepresentation!)

            let imageData = rep?.representation(using: NSBitmapImageRep.FileType.png, properties: [:])

            //NSBitmapImageRep.PropertyKey : Any

            let fileManager = FileManager.default

            //制定文件路径

            let path = "/Users/.../Documents/myCapture.png"

            fileManager.createFile(atPath: path, contents: imageData, attributes: nil)

            //保存结束后Finder中自动定位到文件路径

            let fileUrl = URL(fileURLWithPath: path)

            NSWorkspace.shared.activateFileViewerSelecting([fileUrl])

            

        }

        

        

    }

}

 

改写为工具类中的方法

期待中

posted @ 2019-01-29 17:22  sundaysmac  阅读(651)  评论(0编辑  收藏  举报