【发布时间】:2020-04-28 04:52:49
【问题描述】:
我们可以在本机 mac 应用程序中使用 NSWindow 和 NSVisualEffectView 轻松创建此效果,但我们如何在为 MacCatalyst 构建的应用程序中实现呢?
当然,为 UIWindow 设置 alpha = 0 并在其上添加 UIVisualEffectView 并不能解决问题,它没那么简单。
【问题讨论】:
标签: uiwindow uivisualeffectview mac-catalyst
我们可以在本机 mac 应用程序中使用 NSWindow 和 NSVisualEffectView 轻松创建此效果,但我们如何在为 MacCatalyst 构建的应用程序中实现呢?
当然,为 UIWindow 设置 alpha = 0 并在其上添加 UIVisualEffectView 并不能解决问题,它没那么简单。
【问题讨论】:
标签: uiwindow uivisualeffectview mac-catalyst
您需要将NSVisualEffectView 添加为NSWindow.contentView 的子视图。
NSWindow 不适用于 Mac Catalyst 应用程序,因此您必须按照here 的说明创建一个 macOS 插件,或者使用像 Dynamic 这样的库(完全披露:我是作者)来做到这一点没有插件如下:
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
【讨论】: