本編となるRoltoControllerの説明を2回に分け、しかも利用する側のswiftコードも一緒に書いたので、必要と思われる説明はほぼ書き終わりました。でも、少しだけ補足したいと思います。
Roltoの画質設定パラメーターは3つあります。その設定機能は、アプリの環境設定に含めたと、途中で説明しました。具体的なswiftコードは単純なのですが、一番悩んだのが画面表示です。最終的な表示結果は、次のように考えて決めました。
まずは、パラメーターの並び順です。SDKの解説書には、ブロックサイズ、しきい値、誤差拡散の順で並べられています。この3つのうち、最後の誤差拡散だけは特別で、オンに設定すると他の2つが無効となります。つまり、3つの中では誤差拡散だけが特別で、他の2つをオンオフする機能も持ち合わせます。このような位置付けなので、一番上に誤差拡散を持ってきて、残りの2つが続くという並び順が、ユーザーには一番理解しやすい形となります。
画面表示で使用するUI部品は、誤差拡散がUISwitch、他の2つがUISliderにしました。これらの設定機能を、アプリの環境設定に加えました。アプリを起動して表示した状態が、以下の画像(画面の一部をトリミングしたもの)です。
誤差拡散のオンオフは、2種類の印刷方式の切り替えと表現すれば、ユーザーに伝わりやすいと考えました。UISwitchのオンオフの方向に合わせて、印刷方式名のラベルをつけてあります。
残りの2項目は、UISliderに最大値と最小値を指定して付けました。文字数の関係で「ブロックサイズ」を「Bサイズ」としました(一応、正しい名前はヘルプ機能で補足してあります)が、それ以外は名称をそのまま使っています。もっとわかりやすい言葉に変えたかったのですが、思い浮かびませんでした。ユーザーには、意味が分からなくても、これらの値を変えながら好みの設定を探してもらうしかないと思います。一番下のUILabelで、誤差拡散のときには2つの設定が関係ないことを説明しています。
表示してある初期値(自分で使って、まあまあ良かった感じの値)にさほど意味はありません。しかし以前に、似たようなアプリを作ったときに「最初の値は何だった」と尋ねられた経験があります。余計な手間を減らす意味で、画面に初期値の表示を加えました。
アプリの動きは次のようになります。アプリの初期設定にはデフォルト値があり、何もしなければ、それが使われます。環境設定画面で変更して保存すれば、それが新しい設定値に変わります。RoltoControllerでインスタンスを生成した直後に、設定値をインスタンスに設定して、それが印刷時に使われます。アプリの起動途中で、環境設定画面から設定を変更すると、その新しい値が次の印刷から使われます。
印刷で使う画面も、環境設定画面も、使い終わったら消してメモリーも解放するため、メモリー上に一緒に存在することはありません。環境設定で変更した後は、新たな画面でRoltoControllerインスタンスが新しく生成されるので、必ず最新状態の設定が使われるようになっています。
具体的なswiftコードですが、あまりにも普通なので省略します。特別な工夫は不要ですから、swiftとiOS APIの基礎知識があれば、簡単に作れるでしょう。
Roltoの接続方式についても、少しだけ。iPadアプリからRoltoを使う場合、Roltoとの接続方式として、Wi-Fi直接接続と無線LANルーター経由の2種類から選べます。SDKはどちらにも対応していて、作り方に違いはありません。両方とも試しましたが、直接接続は何度も問題が発生しました。iPadがスリープから復帰したとき、Wi-Fi接続が別な相手に切り替わったり、長い時間アクセスしなかったRoltoが接続できなかったりと、接続に関するトラブルが意外に多く発生しました。ところが無線LANルーター経由でRoltoを接続すると、接続に関するトラブルは皆無でした。まれに通信エラーが発生しますが、直接接続と同じ程度でした。
私の限られた経験からですが、直接接続よりも、無線LANルーター経由を絶対的にお薦めします。複数の機器から印刷できますし、使い勝手の面からも、接続の安定性の面からも、圧倒的に上です。
実際に使ってみると、カバーが開いていたり、印刷の途中で紙が切れたりしたら、その状況がメッセージとしてiPadに表示されました。正しく動いていて、信頼できるSDKだと感じました。依頼主も大喜びなので、Roltoから印刷できるように改良して良かったと思います。
最後に、ちょっと注意点を。初回に書きましたが、今回のSwiftコードはXcode 6.0.1で開発しました。その後継バージョンとなるXcode 6.1では、Optionalの扱いが少し変わったようで、「!」の付いたコードの一部がコンパイルエラーになったり、「!」の不足でもコンパイルエラーが発生するようです。エラーになった箇所は、「!」を消したり足したりして、コンパイルエラーを解消してください。
0 件のコメント:
コメントを投稿