如何为Mac OS截屏NSView?

时间:2018-01-13 04:25:47

标签: swift macos nsview

我目前有一个功能可以在Mac应用程序中创建整个窗口的屏幕截图。但是,我想针对特定的观点。我知道在iOS中你可以做到以下几点:

extension WKWebView {

    var screenshot: UIImage {
        if #available(iOS 10.0, *) {
            return UIGraphicsImageRenderer(size: bounds.size).image { _ in
                drawHierarchy(in: CGRect(origin: .zero, size: bounds.size), afterScreenUpdates: true)
            }
        } else {
            UIGraphicsBeginImageContext(bounds.size)
            drawHierarchy(in: bounds, afterScreenUpdates: true)
            let image = UIGraphicsGetImageFromCurrentImageContext()!
            return image
        }
    }
}

如何使用AppKit而不是UIKit将其转换为Mac OS。以下是我当前计算的属性,用于整个窗口的屏幕截图。

extension WKWebView {

    var screenshot: NSImage {
        let displayID = CGWindowID() // cgmaindisplayid
        let imageRef = CGDisplayCreateImage(displayID)
        return NSImage(cgImage: imageRef!, size: (NSScreen.main?.frame.size)!)
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用NSView方法func dataWithPDF(inside rect: NSRect) -> Data

extension NSView {
    var image: NSImage? {
        return NSImage(data: dataWithPDF(inside: bounds))
    }
}