如何在 MacCatalyst 中创建具有鲜艳背景的 UIWindow?

Posted

技术标签:

【中文标题】如何在 MacCatalyst 中创建具有鲜艳背景的 UIWindow?【英文标题】:How to create an UIWindow with Vibrant background in MacCatalyst? 【发布时间】:2020-04-28 04:52:49 【问题描述】:

我们可以在本机 mac 应用程序中使用 NSWindow 和 NSVisualEffectView 轻松创建此效果,但我们如何在为 MacCatalyst 构建的应用程序中实现呢?

当然,为 UIWindow 设置 alpha = 0 并在其上添加 UIVisualEffectView 并不能解决问题,它没那么简单。

【问题讨论】:

【参考方案1】:

您需要将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

【讨论】:

Dynamic 非常有趣和有前途。谢谢!

以上是关于如何在 MacCatalyst 中创建具有鲜艳背景的 UIWindow?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中创建具有固定宽度和高度的颜色框?

如何在 oracle 中创建具有对象数据类型的列

如何检查是不是在 Xcode UI 测试中创建了新场景?

如何在 Swift 中创建具有自定义形状的 UIButton?

为啥在 VS 2015 中创建的默认 windows 8 通用应用程序具有深色背景

如何在 DotNetNuke 中创建具有自定义页面名称的友好 URL?