如何在 MacCatalyst 中创建具有 Vibrant 背景的 UIWindow?
How to create an UIWindow with Vibrant background in MacCatalyst?
我们可以在本机 mac 应用程序中使用 NSWindow 和 NSVisualEffectView 轻松创建此效果,但我们如何在为 MacCatalyst 构建的应用程序中创建此效果?
当然,为 UIWindow 设置 alpha = 0 并在其上添加 UIVisualEffectView 并不能解决问题,事情没那么简单。
您需要将 NSVisualEffectView
添加为 NSWindow.contentView
的子视图。
NSWindow
不适用于 Mac Catalyst 应用程序,因此您必须按照 here, or use a library like Dynamic(完全披露:我是作者)的说明创建 macOS 插件没有插件如下:
let nsWindow = Dynamic.NSApplication.sharedApplication.delegate.hostWindowForUIWindow(view.window)
let visualEffectView = Dynamic.NSVisualEffectView(frame: NSZeroRect)
nsWindow.contentView.addSubview(visualEffectView, positioned: -1, relativeTo: nil)
visualEffectView.frame = nsWindow.contentView.bounds.asCGRect
visualEffectView.autoresizingMask = 18 /*NSViewWidthSizable | NSViewHeightSizable*/
结果是这样的:
编辑:不要忘记也使控制器的视图透明:
view.backgroundColor = .clear
我们可以在本机 mac 应用程序中使用 NSWindow 和 NSVisualEffectView 轻松创建此效果,但我们如何在为 MacCatalyst 构建的应用程序中创建此效果?
当然,为 UIWindow 设置 alpha = 0 并在其上添加 UIVisualEffectView 并不能解决问题,事情没那么简单。
您需要将 NSVisualEffectView
添加为 NSWindow.contentView
的子视图。
NSWindow
不适用于 Mac Catalyst 应用程序,因此您必须按照 here, or use a library like Dynamic(完全披露:我是作者)的说明创建 macOS 插件没有插件如下:
let nsWindow = Dynamic.NSApplication.sharedApplication.delegate.hostWindowForUIWindow(view.window)
let visualEffectView = Dynamic.NSVisualEffectView(frame: NSZeroRect)
nsWindow.contentView.addSubview(visualEffectView, positioned: -1, relativeTo: nil)
visualEffectView.frame = nsWindow.contentView.bounds.asCGRect
visualEffectView.autoresizingMask = 18 /*NSViewWidthSizable | NSViewHeightSizable*/
结果是这样的:
编辑:不要忘记也使控制器的视图透明:
view.backgroundColor = .clear