修正日: 07/10/19
練習問題11
CalcBMIみたいなのを作ってみよう! その7
とりあえず最低限必要そうな機能は一通り揃ったようなので、最後に仕上げとしてアイコンを付け加えてみましょう。
まず最初にアイコンの準備をします。アプリケーションやファイルのアイコンは「.icns」という拡張子のファイル形式で準備します。ファイルを作るにはまず元になる画像を一般的な画像フォーマット(jpegやpng、tiffなど)で準備します。次にDeveloper Toolsのアプリケーションフォルダに入っている「Icon Composer」というアプリ(/Developer/Applications/Utilities/Icon Composer.app)を起動し、各四角に準備したイメージファイルをドラッグして保存すれば完成です。
サンプルとしてWakabaさん制作のCalcBMI用アイコンのファイルを置いておきますので、ダウンロードしてアイコンを作ってみてください。
次にアイコンをXcodeのプロジェクトに登録して、アプリケーションのアイコンとして認識されるように設定します。まずは作ったicnsファイルをプロジェクトフォルダの適当な所に移動してください。移動したらCalcBmiプロジェクトファイルを開き、icnsファイルを「グループとファイル」の「Resources」の下にドラッグして追加します。
追加したら「ターゲット」の下の「CalcBmi」を選択し、「ファイル」メニューの「情報を見る」を選択して、アプリケーションの設定ウィンドウを開きます。ウィンドウ内の「プロパティ」タブを選択し、「アイコンファイル」の欄にアイコンのファイル名を入力するか、先ほどドラッグして追加したicnsファイルを欄の中にドラッグして、ファイル名を入力します。これで設定完了です。
あとはいつものようにアプリケーションをビルドすることでアイコンがちゃんとついた立派なアプリケーションが完成します。
これだけではつまらないので、今回はもう一工夫してみます。アプリケーションの状態にあわせてDockのアイコンを変更します。まずは画像を準備します。今回はわざわざicnsファイルを作らないで普通のpngファイルなどを準備するだけで大丈夫です。こちらにサンプルを置いておきます。アプリケーションアイコンと同じくWakabaさん制作です。
ファイルを準備したらアプリケーションアイコンと同様にドラッグアンドドロップでXcodeプロジェクトウィンドウのResourcesの下に追加します。
次にプロジェクトに追加したイメージファイルのデータを、プログラム中で取り出してDockに表示する手順です。まずはイメージの取り出し方です。
NSImage *anIcon;
anIcon=[NSImage imageNamed:@"blue.icns"];
画像を取り扱うにはその名の通りNSImageというクラスを使います。そしてプロジェクトに追加してあるイメージファイルを取得するには「+ (id)imageNamed:(NSString *)name」というNSImageクラスのクラスメソッドを利用します。引き数「name」に読み込みたいイメージファイルの名前をNSStringで渡してやれば、アプリケーションバンドルの中から該当するファイルを探して読み込み、NSImageオブジェクトとして返してくれます。簡単ですね。
次にNSImageをDockに表示する方法です。
[NSApp setApplicationIconImage:anIcon];
たった一行です。最初の「NSApp」はアプリケーション本体を司るオブジェクトで「NSApplication」クラスのインスタンスです。一見クラスメソッドのようにも見えますが、クラス名ではありません。グローバル変数といって、プログラム中どこからでも呼び出すことができる特殊な変数です。例えば
[NSApp terminate:nil];
と書くとプログラムからアプリケーションを終了させることができます。このNSAppの「setApplicationIconImage:anIcon:」メソッドに、Dockに表示させたい画像のNSImageインスタンスを渡せばDockの内容が変わります。
ということでここで問題です。BMI計算の結果にあわせて、痩せ過ぎなら青、太り気味なら黄色、肥満なら赤とDockのアイコン表示が変わるように変更してみてください。
解答はこちら