iPhoneフリック練習アプリ「ふりっく」

2012/09/06
会社でいくつかスマフォアプリ作ってるけど、8月にリリースしたiPhoneアプリは個人的に出来が良い(自称)ので宣伝も含め紹介 アプリ名:ふりっく(無料) 公式ページ ちなみに、新機能を追加した有料版も近日リリース予定です。 ■開発のきっかけ 会社でランチ中に「フリック入力遅いんだよねえ」って話になって、じゃぁ練習アプリ作ろうかと、会社に戻って

プロトタイプが3時間でできました

が、、デザイン・辞書や他ごとでちょっと時間かかってしまいましたが。

辞書

一番時間を費やしたのが「辞書」 APIとか無料で使えそうな辞書ファイルとか、会社泊まってまでさんざん探しました。。。 で翌日、閃いてあるファイルを解析してPHPパースしてJSON辞書を作りました。

プログラム

キーボードの選択

iOS5からキーボードの候補表示位置が変わって話題となりましたが、実はキーボード入力の仕様も若干変わってるんですよね。 単直に言うと、

濁点の解析が面倒

キーボーはアプリの性格も含めていくつかあると思いますが大きく分けて、

(1) iOS純正のキーボード(UITextField)を使う (3) オリジナルキーボードを作る

今回のアプリでは純正を採用しましたが、MikuFlickみたいなアプリはオリジナルキーボードを作る必要がありますね。 デザインやアニメーション、入力ロジック等自由が広いですが、やっぱり面倒です。 (逆にカスタムクラス&コンポーネントを作れば良いと言う話ですが)

iOSの濁点・半濁点・小文字判断は厄介

純正のフリック入力では、例えば「ば」なら「は + 濁点」の NSString にわけて処理されます。 つまり

(1) UITextField に「ば」が確定されるのを待つ (2) 「は」と「濁点」を別々に判別する

の2通りですが、本当に作り込むなら(2)を選択するでしょう。 ただ、辞書ファイルデータと比較する際に「ば」と「は + 濁点」を比較するロジック必要になります。 その点(1)なら単に確定文字を比較するだけなのです。 しかしその反面、入力確定するまで入力候補が表示されてしまいます。

できるだけ入力候補を出さない

「ふりっく」では、濁点/半濁点を除いてできるだけ入力候補を出さないように、1文字ずつチェックしています。 その際、Editing Changed イベントを使うのではなく、
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
を利用します。 shouldChangeCharactersInRange は、Editing Changed イベントより先に呼ばれる為、「NO」を返すことで、Editing Changed イベントが呼ばずに完結し、入力候補を常に非表示できます。 ただ、濁点・半濁点・小文字のように複数キータップが必要な場合は「YES」を返して入力確定を待つことになり、入力候補対策の点で不十分です。 常に入力候補を表示しないようにするには、

辞書ロジックレベルで濁点・半濁点・小文字など複数タップに対応する

必要があります。 恐らくは。。。 しかし、他のアプリよりは出来がいいと思うんだけど、ランキングがいまいち伸びないなぁ(^^;)
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel 7 リリース
v-html でHTML表示する
Laravel で Vue コンポーネントを使う
Laravel で Nuxt.js を使ってみる(Docker環境)
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Dockerで不要なコンテナ・イメージを削除
Mac で Laradock の構築
yarn インストール&プロジェクト作成
Laravel 6.x 構築(Homestead編)
Composer インストール
nvm インストール
npm install が Mac でエラー
HTMLタグでカーソルが同時処理(ミラーリング)されてしまう
DI(依存性注入)
[Ubuntu]Let's Encryptで無料の証明書を利用する
[Apache]Apache2.4のアクセス制限が変更
[Ubuntu]rootのログインとsudo権限追加
タミヤ マイコンロボット工作セットをMacに接続してみた
pgAdimn4 でブラウザで開けなくなる
Java8 を HomebrewとjEnvで構築
Android Studio環境構築 2019
ロケールの再構築
vagrant グループに Apacheを追加