Rom*_*4in 10 macos swift swiftui
如何创建 SwiftUIView
扩展来返回NSImage
?我已经看到如何在 iOS 上使用它来完成此操作UIGraphicsImageRenderer
,但似乎没有 macOS 等效项。
Osk*_*kar 15
视图+图像.swift
import SwiftUI
extension View {
func renderAsImage() -> NSImage? {
let view = NoInsetHostingView(rootView: self)
view.setFrameSize(view.fittingSize)
return view.bitmapImage()
}
}
Run Code Online (Sandbox Code Playgroud)
NoInsetHostingView.swift
import SwiftUI
class NoInsetHostingView<V>: NSHostingView<V> where V: View {
override var safeAreaInsets: NSEdgeInsets {
return .init()
}
}
Run Code Online (Sandbox Code Playgroud)
NSView+Image.swift
public 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)
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定到底为什么NoInsetHostingView
需要,但只要是正常的NSHostingView
图像就有不需要的插图,这可以修复它。