如何告诉iOS 11中的Smart Invert不要反转我的app颜色并检测它是否已启用?

问题描述 投票:28回答:3

iOS 11有一个名为“智能反转颜色”的新功能,我想在我的应用程序中利用它。我已经在我的应用程序中实现了自己的黑暗模式,因此当启用Smart Invert时,我将自己执行“颜色反转”过程。我想知道的是:

  • 我如何告诉iOS 11应用程序有一个黑暗的界面并且不会反转颜色,类似于iOS 10+中的iOS Clock应用程序?
  • 如何检测哪种反转颜色,特别是“智能反转”或“经典反转”?

我已经在谷歌,StackOverflow和Apple开发者网站的各个地方搜索了一段时间,仍然无法找到答案。

提前致谢!

更新:

感谢@Toma's answer,我成功地阻止了iOS 11在我的应用中反转视图。现在我有另一个问题......

对于检测部分,如果Smart Invert打开(iOS 11),UIAccessibility.isInvertColorsEnabled(Swift 4.2)似乎只返回true。至少对我来说这已经足够了。我现在想知道如何找出Classic Invert的开启时间。如果您知道如何操作,请在下面发布更新的答案!谢谢!

ios swift colors invert ios11
3个回答
35
投票

请参阅iOS 11 UIView的财产accessibilityIgnoresInvertColors


8
投票

忽略所有UIImageViews的智能反转。在app delegate中设置

if #available(iOS 11.0, *) {
   UIImageView.appearance().accessibilityIgnoresInvertColors = true
}

3
投票

Swift 4.2

要检查当前是否启用了智能反转,您可以使用UIAccessibility.isInvertColorsEnabled。您还可以通过观察UIAccessibility.invertColorsStatusDidChangeNotification获得更改通知:

NotificationCenter.default.addObserver(forName: UIAccessibility.invertColorsStatusDidChangeNotification,
                                       object: nil,
                                       queue: OperationQueue.main) {
                                        [weak self] _ in

  if UIAccessibility.isInvertColorsEnabled {
    // smart invert is enabled
  } else {

  }
}
© www.soinside.com 2019 - 2024. All rights reserved.