将 SwiftUI 视图转换为 NSImage
Posted
技术标签:
【中文标题】将 SwiftUI 视图转换为 NSImage【英文标题】:Convert SwiftUI View to NSImage 【发布时间】:2021-09-24 11:51:40 【问题描述】:如何创建 SwiftUI View
扩展以返回 NSImage
?我已经看到如何在 ios 上使用 UIGraphicsImageRenderer
完成它,但似乎没有 macOS 等效项。
【问题讨论】:
【参考方案1】:View+Image.swift
import SwiftUI
extension View
func renderAsImage() -> NSImage?
let view = NoInsetHostingView(rootView: self)
view.setFrameSize(view.fittingSize)
return view.bitmapImage()
NoInsetHostingView.swift
import SwiftUI
class NoInsetHostingView<V>: NSHostingView<V> where V: View
override var safeAreaInsets: NSEdgeInsets
return .init()
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)
我不确定为什么需要NoInsetHostingView
,但只有一个普通的NSHostingView
,图像有不想要的插入,这可以解决它。
【讨论】:
感激不尽***.com/a/69977253/1610473以上是关于将 SwiftUI 视图转换为 NSImage的主要内容,如果未能解决你的问题,请参考以下文章
将 SwiftUI 中的文本与背景属性相结合会产生错误,因为无法将“某些视图”类型的值转换为预期的参数类型“文本”?
使用 SwiftUI 从转换目的地返回时,我想将显示的列表更新为最新状态
将 SwiftUI 视图渲染到屏幕外并将视图另存为 UIImage 以共享
将 AppKit/UIKit 中的 Key-Value Observation 转换为 Combine 和 SwiftUI