iOS VoiceOver 点字ディスプレイの日本語点字表示を改善するアプリの作り方-句読点を置き換える

私は全盲の視覚障害者で、アップル社のiPhoneなど、毎日の生活でとても便利に使わせてもらっています。ありがとうございます。

iOSのアクセシビリティ機能のVoiceOver、音声読み上げについては、非常に使いやすくなってきていますが、点字ディスプレイへの日本語点字の表示がまだ正式なサポートになっていません。

日本語点字の表示が可能なことは可能なのですが、点字を読みやすくするための「分かち書き」ができていないことと、さらに困るところは、「、。・」など句読点があると、その後の表示が、まるまる抜け落ちてしまうことです。

この句読点による点字表示の抜け落ちは単純に、句読点を削除または別の文字に置き換えてしまえばよいので、下記のようなアプリで改善できます。

テキストビュー(UITextView)を配置して、そこにクリップボードの内容を文字列置換したものを入れます。

次の置換をします。

  • 、を,に
  • 。を.に
  • ・を-に
  • 「を-に
  • 」を-に

こうするとVoiceOverの点字ディスプレイへの日本語点字表示で文字の抜け落ちがなくなります。

下記はXcode8、swift3で試しました。

クリップボードのテキスト中の句読点類を別の記号に置き換えて表示するアプリ

全盲の私は次のようにMac OSのVoiceOverを使ってXcodeをキーボードだけで操作します。

  1. コマンド+シフト+N – 新規プロジェクト
  2. Caps+右カーソル、Caps+シフト+下カーソルでテンプレート選択に入り、Single viewをエンターキーで選択
  3. プロジェクト名を入力
  4. Caps+コマンド+エンドキーでフォルダ作成のボタンに移動して決定
  5. コマンド+1、Caps+シフト+下カーソルでプロジェクトナビゲータのMain storyboardを選択
  6. Caps+シフト+上カーソル、Caps+右カーソルを何回か、「View UIView」と読み上げられるところで、Caps+スペース
  7. オブジェクトライブラリへ、コントロール+オプション+コマンド+3、「text」と入力して「textView」を検索
  8. Caps+左カーソルで「textView」を選び、Caps+シフト+コマンド+スペースでドラッグ開始
  9. Caps+左/Caps+右カーソルでキャンバスの「View UIView」と読み上げられるところに合わせて、Caps+シフト+コマンド+スペースでドロップ

これでテキストビュー(textView)が張り付けられます。

オプション+コマンド+エンターでアシスタントエディタを開き、ViewController.swiftの編集をします。

@IBOutlet …と書くと「not connected」というエラーが出るのでそこにCaps+右/Caps+左カーソルで合わせて、Caps+シフト+コマンド+スペースでそれをドラッグします。

キャンバスに張り付けた「textView」のところに合わせてCaps+シフト+コマンド+スペースでドロップすると、「connected」となりコードとビューの接続ができます。

ViewController.swift の内容

import UIKit

class ViewController: UIViewController {
let pasteboard = UIPasteboard.general // クリップボードを使う
@IBOutlet var noKutoutenTextView: UITextView! // テキストビューを使う

override func viewDidLoad() {
    super.viewDidLoad()
    var tempString = pasteboard.string! // クリップボードの内容を入れる
    tempString = tempString.replacingOccurrences(of:"、", with:", ") // 文字列の置き換え
    tempString = tempString.replacingOccurrences(of:"。", with:". ")
    tempString = tempString.replacingOccurrences(of:"・", with:"-")
    tempString = tempString.replacingOccurrences(of:"「", with:" -")
    tempString = tempString.replacingOccurrences(of:"」", with:"- ")
    let resultString = tempString // 最終的な文字列
    noKutoutenTextView.text = resultString // 最終的な文字列をtextViewに入れる

    // Do any additional setup after loading the view, typically from a nib.
}    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

参考

関連投稿