web-dev-qa-db-ja.com

iOS 11のSmart Invertにアプリの色を反転させず、アプリの色が有効になっているかどうかを検出する方法

iOS 11には「Smart Invert Colors」と呼ばれる新しい機能があります。この機能をアプリで活用したいと思います。アプリには独自のダークモードが既に実装されているため、Smart Invertが有効になっているときに自分で「色反転」プロセスを実行します。私が知りたいのは:

  • IOS 10+のiOS Clockアプリと同様に、アプリのインターフェイスが暗いため、色が反転しないことをiOS 11に伝えるにはどうすればよいですか?
  • どの種類の反転色、特に「スマート反転」または「クラシック反転」が有効になっているかを検出するにはどうすればよいですか?

Google、StackOverflow、およびApple開発者のWebサイトでどこでも検索しましたが、答えが見つかりませんでした。

前もって感謝します!

更新:

@ Toma's answer のおかげで、iOS 11がアプリのビューを反転させないようにできました。今、私は別の問題を抱えています...

検出部分については、UIAccessibility.isInvertColorsEnabled(Swift 4.2)は、スマート反転がオンの場合にのみtrueを返します(iOS 11)。少なくとも今のところはそれで十分です。 Classic Invertがオンになっていることを確認する方法を知りたいと思っています。方法を知っている場合は、更新された回答を以下に投稿してください!ありがとう!

30
LWJ

IOS 11 UIViewのプロパティ accessibilityIgnoresInvertColors を参照してください。

35
toma

すべてのUIImageViewのスマート反転を無視します。アプリデリゲートで設定

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

Swift 4.2

スマート反転が現在有効になっているかどうかを確認するには、 UIAccessibility.isInvertColorsEnabledUIAccessibility.invertColorsStatusDidChangeNotification

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

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

  }
}
3