はじめに
macOSのシステム環境設定「アクセシビリティ」で設定した項目を自アプリケーションに反映させる方法です。
今回は図中でいう赤枠で示した範囲に関係する事柄のみ言及します。
APIのヒント
macOSネイティブ環境では基本的にNSAccessibility
を相手にプログラミングを行なってゆきますが、今回は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にする(不透明にする)。
-
「コントラストを上げる」が有効
- 独自に着色した枠線の色を濃くする、周囲とのコントラストを上げる調整を行う。
…などなど。
細かいことですがさほど難しくもないので、対応することで高品質なネイティブアプリケーションに仕上がります。できる範囲から手をつけてみましょう。