gpt4 book ai didi

ios - 可以在暗/亮模式更改时重新加载应用程序吗?

转载 作者:行者123 更新时间:2023-11-28 10:27:03 26 4
gpt4 key购买 nike

我的应用程序广泛使用了 CAGradientLayers,当切换暗/亮模式时,它显然不会自动更新它们的颜色。不过,当应用关闭并重新打开时,它们会更新颜色。

我知道我可以使用以下代码来检测更改并单独重新加载每个 View

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
//
}

但是我正在寻找不需要我单独更新每个 View 的修复程序。有没有一种方法可以检测亮/暗模式更改(可能在应用程序委托(delegate)中)并强制整个应用程序自行重新加载(就像它被强制关闭并重新打开一样)?


用解决方案编辑:

应用程序无法按照我最初想象的方式重新加载,但是有一个相当简单的解决方案,它更简洁。

如已接受的答案所述,可以创建 UIView 的子类,其中包含 CAGradientLayer 作为子层。然后,您可以覆盖 traitCollectionDidChange 以在系统样式更改时自动重新加载 View 。关键是要记住 UIColors 会在系统样式更改时自动更新,但 CGColors 不会自动更新。因此,您需要为渐变存储原始 UIColor,并在每次更新系统样式时将 UIColor 转换回 CGColor

下面链接的是一个 Github Gist,其中包含一个非常基本的“渐变 View ”实现,它将自动响应明暗模式的变化。它可以作为 subview 添加到其他 View 或根据需要进行修改。

GradientView.swift

最佳答案

没有办法以这种方式“重新加载您的应用程序”。出现这个问题是因为 CAGradientLayer 使用了 CGColor,它不会动态适应系统样式。

我通过在实现 traitCollectionDidChange 的渐变层周围包装一个 UIView 来相应地更新渐变的颜色,从而解决了这个问题。也许您可以这样做并将其用作 subview 而不是子层。

关于ios - 可以在暗/亮模式更改时重新加载应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58544849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com