SwiftUIによるアクセシビリティの概要
Introduction to accessibility with SwiftUI
SwiftUIのレイアウトのスタックベースのアプローチです:私たちは内部で物事を置くため、すべてが自然の秩序を持っているHStackとVStack、そのシステムは、我々のレイアウトが流れるべきか大まかに理解することができます。
SwiftUIはまた、すべてのインタラクティブコントロールにラベルを追加して、すべてが何のためにあるのかを明示的に示すことを強くお勧めします。はい、これらのラベルを非表示にすることはできますが、非表示になっている場合でも、スクリーンリーダーなどの音声プロンプトとしてシステムで使用されます。
カスタムフォントでダイナミックタイプを使用する方法
How to use Dynamic Type with a custom font
iOS14用に更新
iOS 14以降を使用している場合は、カスタムフォントが自動的に拡大縮小され、それ以上の作業は必要ありません。ただし、フォントを特定のダイナミックタイプフォントに対して拡大縮小する場合は、次のrelativeToようなパラメーターを使用する必要があります。
これにより、フォントは24ptで開始されますが、Headline DynamicTypeフォントに比べて拡大および縮小されます。
Text("Scaling")
.font(.custom("Georgia", size: 24, relativeTo: .headline))
iOS 13で立ち往生している場合は、以下を読み続けてください…
モーション削減アクセシビリティ設定を検出する方法
How to detect the Reduce Motion accessibility setting
多くのユーザーはアニメーションに敏感であり、特にアニメーションは大規模または複雑です。その結果、iOSにはReduce Motionと呼ばれるユーザー補助設定が組み込まれており、アプリはこれを適切に読み取って応答できます。
SwiftUIでは、この設定は環境ブール値として公開されているため、ビューにプロパティを追加することから始める必要があります。
「モーションを減らす」とはどういう意味かを決めるのはあなた次第です。アニメーションを削除するべきですか、それとも単にアニメーションを弱くするように変更するべきですか?重要なアニメーションをいくつか残し、視覚的にアピールするアニメーションを削除する必要がありますか?
たとえば、ほとんどのユーザーに弾力のある春のアニメーションが必要で、モーションを減らしたいユーザーにはアニメーションがまったく必要ない場合は、次のようなアニメーションモディファイヤを使用できます。
//-----------------------------------
import SwiftUI
struct ContentView: View {
@Environment(\.accessibilityReduceMotion) var reduceMotion
@State var scale: CGFloat = 1
var body: some View {
VStack {
Spacer()
Circle()
.frame(width: 20, height: 20)
.scaleEffect(scale)
.animation(reduceMotion ? nil : .spring(response: 1, dampingFraction: 0.1))
Spacer()
Button("Increase Scale") {
self.scale *= 1.5
}
}
}
}
//-----------------------------------
ダークモードを検出する方法
How to detect dark mode
//-----------------------------------
import SwiftUI
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text(colorScheme == .dark ? "In dark mode" : "In light mode")
}
}
//-----------------------------------
How to use decorative images to reduce screen reader clutter
引数(decorarive)を使って画像を指定すると、ボイスオーバーなどのアクセシビリティ対応時に無視されます。
装飾目的などで、読み上げる必要のない画像に指定します。
//-----------------------------------
import SwiftUI
struct ContentView: View {
var body: some View {
Image(decorative: "dokuro")
}
}
//-----------------------------------

