LoginSignup
7
4

More than 1 year has passed since last update.

macOSのアクセシビリティ環境設定にアプリケーションの挙動を合わせる

Last updated at Posted at 2021-05-25

はじめに

macOSのシステム環境設定「アクセシビリティ」で設定した項目を自アプリケーションに反映させる方法です。
今回は図中でいう赤枠で示した範囲に関係する事柄のみ言及します。

macOSシステム環境設定「アクセシビリティ」
添付図 – システム環境設定「アクセシビリティ」

APIのヒント

macOSネイティブ環境では基本的にNSAccessibilityを相手にプログラミングを行なってゆきますが、今回はNSWorkspaceに頼ります。

NSWorkspaceには以下のようなプロパティが備わっており、それぞれが添付図にあるチェックボックスの設定項目に対応しています。

NSWorkspace
// 「コントラストを上げる」
@available(macOS 10.10, *)
open var accessibilityDisplayShouldIncreaseContrast: Bool { get }

// 「カラー以外で区別」
@available(macOS 10.10, *)
open var accessibilityDisplayShouldDifferentiateWithoutColor: Bool { get }

// 「透明度を下げる」※インターフェイス全体から透過表現を減らす設定
@available(macOS 10.10, *)
open var accessibilityDisplayShouldReduceTransparency: Bool { get }

// 「視差効果を減らす」
@available(macOS 10.12, *)
open var accessibilityDisplayShouldReduceMotion: Bool { get }

// 「カラーを反転」
@available(macOS 10.12, *)
open var accessibilityDisplayShouldInvertColors: Bool { get }

環境設定の確認方法

NSWorkspaceオブジェクトには NSWorkspace.shared で常にアクセスできるので、例えば以下のようにして設定のオンオフをいつでも確認できます。

if NSWorkspace.shared.accessibilityDisplayShouldReduceTransparency {
    // 視差効果を減らす設定が有効な場合
    ...
}
else {
    ...
}

環境設定の変更通知

環境設定変更の通知を受け取るには NSWorkspaceAccessibilityDisplayOptionsDidChangeNotification を利用します。先ほど挙げたプロパティには対応しています。

この Notification の受信設定は一般的な方法ではなく、指定の通知センター notificationCenter を使わなければなりません。

// アクセシビリティ設定の変更を受信する。`NSWorkspace.shared.notificationCenter` に受信登録する必要がある。
NSWorkspace.shared.notificationCenter.addObserver(self,
                                                  selector: #selector(accessibilityDisplayOptionsDidChangeNotification(_:)),
                                                  name: NSWorkspace.accessibilityDisplayOptionsDidChangeNotification,
                                                  object: nil)

使いどころ

独自に設計したユーザーインターフェイスの振る舞いのアクセシビリティを高めるために使用します。アプリケーションはOSが備える環境設定に可能な限り準拠することが好ましいです。

  • 「視差効果を減らす」が有効
    • リサイズ等のアニメーションを無効化する、必要最小限に減らす。
  • 「透明度を下げる」が有効
    • 透過しているビューの背景色アルファ値を1.0にする(不透明にする)。
  • 「コントラストを上げる」が有効
    • 独自に着色した枠線の色を濃くする、周囲とのコントラストを上げる調整を行う。

…などなど。

細かいことですがさほど難しくもないので、対応することで高品質なネイティブアプリケーションに仕上がります。できる範囲から手をつけてみましょう。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4