修饰器与托管
修饰器用于设置原生 SwiftUI 控件的样式。反向托管把 QuickGUI 内容放进 SwiftUI。
#修饰器
通过 Modifiers 传入修饰器工厂。可用的工厂包括 ButtonStyle、ButtonBorderShape、ControlSize、LabelStyle、Tint 和 Disabled。
return ui.SwiftUI.Button(ui.SwiftUIButtonProps{
Label: "Create project",
Modifiers: []ui.SwiftUIModifier{
ui.SwiftUI.ButtonStyle("borderedProminent"),
ui.SwiftUI.ControlSize("large"),
ui.SwiftUI.Tint("#f97316"),
},
})#Liquid Glass
在受支持的系统上,ui.SwiftUI.ButtonStyle("glass") 会请求系统玻璃按钮。最终外观由 macOS 决定。
#反向托管
ui.SwiftUI.QuickGUIHostView 托管一个 QuickGUI 子树。给它尺寸,并在回调中声明子节点。
func SwiftUiQuickguiHostViewExample() *ui.Element {
return ui.SwiftUI.Host(
ui.SwiftUIHostProps{MatchContents: true},
func() *ui.Element {
return ui.SwiftUI.QuickGUIHostView(
ui.SwiftUIQuickGUIHostViewProps{Width: 320, Height: 180},
func() *ui.Element {
return ui.View().Child("QuickGUI inside SwiftUI").
Width("100%").Height("100%").Padding(16)
},
)
},
)
}#SwiftUI Popover
SwiftUI Popover 使用原生触发器。其内容可以托管 QuickGUI 子节点。
func SwiftUiPopoverExample() *ui.Element {
open, setOpen := ui.CreateSignal(false)
return ui.SwiftUI.Host(
ui.SwiftUIHostProps{MatchContents: true},
func() *ui.Element {
return ui.SwiftUI.Popover.Root(
ui.SwiftUIPopoverProps{
IsPresented: open,
OnIsPresentedChange: setOpen,
},
func() *ui.Element {
return ui.Fragment(
ui.SwiftUI.Popover.Trigger(ui.SwiftUIPopoverTriggerProps{
Render: func() *ui.Element {
return ui.SwiftUI.Button(ui.SwiftUIButtonProps{Label: "Account"})
},
}),
ui.SwiftUI.Popover.Content(
ui.SwiftUIPopoverContentProps{},
func() *ui.Element {
return ui.SwiftUI.QuickGUIHostView(
ui.SwiftUIQuickGUIHostViewProps{Width: 240, Height: 120},
"Account settings",
)
},
),
)
},
)
},
)
}#生命周期
所属窗口显示后,Host 才会出现;移除时关闭。在回调内声明反向托管的子节点,使它们属于该嵌入表面。
