如何创建 SwiftUI View
扩展返回 NSImage
?我已经看到如何使用 UIGraphicsImageRenderer
在 iOS 上完成它但似乎没有 macOS 等价物。
最佳答案
View +图像.swift
import SwiftUI
extension View {
func renderAsImage() -> NSImage? {
let view = NoInsetHostingView(rootView: self)
view.setFrameSize(view.fittingSize)
return view.bitmapImage()
}
}
NoInsetHostingView.swiftimport SwiftUI
class NoInsetHostingView<V>: NSHostingView<V> where V: View {
override var safeAreaInsets: NSEdgeInsets {
return .init()
}
}
NSView+Image.swiftpublic extension NSView {
func bitmapImage() -> NSImage? {
guard let rep = bitmapImageRepForCachingDisplay(in: bounds) else {
return nil
}
cacheDisplay(in: bounds, to: rep)
guard let cgImage = rep.cgImage else {
return nil
}
return NSImage(cgImage: cgImage, size: bounds.size)
}
}
我不确定为什么NoInsetHostingView
需要,但只是一个普通的 NSHostingView
图像有不想要的插图,这修复了它。
关于swift - 将 SwiftUI View 转换为 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69314578/