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

LWJ*_*LWJ 31 colors invert ios swift ios11

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

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

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

提前致谢!

更新:

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

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

tom*_*oma 35

请参阅iOS 11 UIView的属性accessibilityIgnoresInvertColors.


Arn*_*ius 8

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

if #available(iOS 11.0, *) {
   UIImageView.appearance().accessibilityIgnoresInvertColors = true
}
Run Code Online (Sandbox Code Playgroud)


Ork*_*nov 5

斯威夫特 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 {
   
  }
}
Run Code Online (Sandbox Code Playgroud)