週末に「普段使いのシンプル電卓 malc」 のバージョンアップ申請をしました。 iOS8対応、iPhone6対応を含む多くの機能強化、新しいiTunesConnect と 盛りだくさんのアップデートです。 (申請しちゃったら、あとは すんなりレビューを通ってくれることを祈るしかありません)
さて、今回は、キーボードの進化について
きっかけはACキーとBSキーの切り替える機会が多くて面倒だったこと。これを何とかできないかを考え始めました。
最初の思いつきでは、
- ACキーとBSキーを縦に並べ、その代わりにカーソルキーとして使うキーを1つに減らす
- カーソルキーを長押ししたら、すぐ上に、4つのカーソルキーすべてが表示される
という仕様でした。これならACキーとBSキーはとても使いやすくなります。
ただ、色を変える上下キーは滅多に使わないけど、左右キーは良く使うし同時に使う事が多いので、切り替えは面倒そう。 ということでボツにしました。
さきほどのアイディアを改良して、OS標準の日本語入力キーボードのように、フリック入力する方法で解決しようと思いました。
- 長押しで、キーの上下左右に、隠れていた上下左右のカーソルキーが表示される
- 表示前でもフリックで入力できる
という仕様です。 ただ、カーソルキーを左端や右端に置けなくなるのでボツ。
ここでいったん検討のキッカケまで戻って、なぜACキーとBSキーを切り替える機会が多いのかを考えました。
まず答えを求めた直後に、ACを使うことが多いのは想定どおり(ここはACが表示されているのでOK)。 問題は、答えの数字を再利用しないのに、続けて数字をまちがって打ってしまった場合にACを使うこと、しかもその頻度が多いことだと気が付きました(その場合は、BSキー表示から ACキー表示に手動で切り替えないとダメ)。
自動的に答えが再利用されるより、計算結果を使う場合にはメモリをタップして、直前の答えを入力してもらう方が自然のような気がします。 そこで次のような仕様にしました。
- 「答えの再利用をするか? しないか?」の仕様を選んでもらう。デフォルトは「再利用しない」
- 再利用されない時の答えを、式入力の時より明るい色の表示色にする
2つ目の仕様は、よく見ると答えが再利用されるかが見た目で区別できるようにという目的です。
プログラム的には、UITextViewのtext色よりplacehold色を明るくしておきます。そして再利用されない場合は答えは placeholdに代入します。これでキーを打つと答えが消えるというのが自然に実現できます。
これでおしまいにしてもよかったのですが、Cキーを付けたかったこともあり、キーボードはやはり進化させることに。ACやCキーは、他のキーに比べて誤って押しづらい方がいいということもあり、結局
ACキーを独立させました。 場所は、キーボードの領域内ではなく、この記事のトップ写真のように、主表示(物理的な電卓でいうとLCDの部分ですね)領域の左上端にキーを置くことにしました。
さらにさらに、
キー配置のカスタマイズができるようにしました。
大昔にCASIOが決めたという電卓型レイアウトは、下から0,1,2,3 ...と配置されます。 一方、 電話型(もう誰もそんな言い方しないプッシュフォンですねw)レイアウトは、上から 0,1,2,3 ...と配置されます。どちらが良いかは人により違うかもしれません。 テンキー以外も、デフォルトでは 演算子が左端 カーソルや=が右端ですが、逆に配置したり、両方とも右側に集めるというレイアウトも選べるようにしました。
具体的には 次のようなプログラミングにしています。
- ボタンの生成と、配置を同時に行うのをやめ、分割して行う。
- ボタンを生成(フォントサイズの調整、イベント登録)し、キートップの文字列をkeyとするNSDictionaryに ボタンオブジェクトを格納しておく。
- 配置パターンは、キートップの配列を複数パターン作っておいて、設定でそれを選択する。
- 全体レイアウトとテンキーレイアウトが入れ子関係なので、上記配列も入れ子関係で表現しておくき、その2つでボタンを配置を行う。
おまけと言ってはなんですが、
キータッチを改善するために、BSとAC/Cは
UIControlEventTouchUpInside、それ以外は
UIControlEventTouchDownでイベント処理するようにしました。
UIControlEventTouchDownにできるのは、ボタンが大きいデザインならではの修正です(ボタンが小さいとミスタッチが増えでかえって使いづらいと思います)。 この修正で、式の入力などはボタンを押したタイミングで反応するので、即応性が高まりました。修正系は押し間違えを防ぐため、わざと即応性を落としボタンを離したタイミングで反応するようにしています。
標準アプリも含めて他のアプリではあまりされていないようなとても細かい修整ですが、キモチ良く使っていただけると嬉しいです。
photo by