33

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

  • 如何告诉 iOS 11 该应用程序具有深色界面并且不反转颜色,类似于 iOS 10+ 中的 iOS 时钟应用程序?
  • 如何检测启用了哪种反转颜色,特别是“智能反转”或“经典反转”?

我已经在 Google、StackOverflow 和 Apple 开发者网站上到处搜索了一段时间,但仍然找不到答案。

提前致谢!

更新:

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

对于检测部分,(Swift 4.2)似乎只有在 Smart Invert 开启(iOS 11)UIAccessibility.isInvertColorsEnabled时才会返回。true至少现在对我来说已经足够了。我现在想知道如何找出经典反转何时开启。如果您知道该怎么做,请在下面发布更新的答案!谢谢!

4

3 回答 3

38

请参阅 iOS 11UIView的属性accessibilityIgnoresInvertColors

于 2017-06-14T15:51:08.563 回答
8

忽略所有 UIImageViews 的智能反转。在应用委托中设置

if #available(iOS 11.0, *) {
   UIImageView.appearance().accessibilityIgnoresInvertColors = true
}
于 2018-04-13T11:37:27.197 回答
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 {
   
  }
}
于 2019-04-03T00:50:42.320 回答