viva Cocoa Objective-C 入門 第2章 Xcode を使ってみましょう
ホーム メール
 
目次 < 前ページ 次ページ >

シングルトンアプリケーション

 シングルトンアプリケーションとはメインウィンドウを一つだけ持つアプリケーションのことです。この節ではシンプルな画像ビューワーを1行もコーディングすることなく作っていきます。

簡易画像ビューワ MyImage の作成

 いよいよGUIアプリケーションの作成です。新規プロジェクトウィンドウを開いてください。左ペインでMac OS Xの“Application”を選んで、右ペインでは“Cocoa Application”を選びます。“オプション”ではどこにもチェックが入っていない状態にします。設定が終わりましたら「選択...」ボタンをクリックしてください。

図新規プロジェクト - Cocoa Application


【Xcode 3.1の場合は】

 左ペインでMac OS XのApplicationを、右ペインでCocoa Applicationを選び「選択...」ボタンをクリックします。

 次に現れる保存ダイアログシートで名前を“MyImage”にします。保存場所は前と同じデスクトップのObjCフォルダかあなたの選んだ場所にしてください。保存場所については今後、本書で指定することはしませんが、本書を通して同じ場所に保存していくことをおすすめします。なおアプリケーション(GUIを持つソフトウェア)の名前は大文字ではじめるのが慣習となっています。


 「i」という小文字ではじまるアプリケーションも多いですが...

 保存シートで名前と保存場所を決めて保存ボタンをクリックするとMyImageプロジェクトウィントウが開きます。

図 MyImageプロジェクトウィンドウ1

■ 構成ファイルの説明

1. AppKit.framework
GUIパーツを担当するAPIが集まったフレームワークです。

2. Cocoa.framework
AppKit.frameworkとFoundation.frameworktとを一緒に読み込むフレームワークです。

3. CoreData.framework
Modelオブジェクトをコーディングすることなく構築するフレームワークです。詳しくは○○章で説明いたします。

4. Foundation.framework
ソフトウェアの基礎となるAPIが集まったフレームワークです。プレーンな文字はこちらに含まれていますがそれ以外は目に見えることのないオブジェクトのAPIが集まっています。

5. Info.plist
アプリケーション名、バージョン番号、アイコン画像などを指定するファイルです。

6. InfoPlist.strings (English)
アプリケーションが英語版として起動した場合のコード内の文字列(プログラムによって“ビュー”に表示される文字列)を英語バージョンに置き換えるファイルです。CocoaプログラミングではAppleの指針により、まず英語バージョンを作成してから、このファイルをコピーして各言語のバージョンを作成するという手順を踏むことになっています。なお、ここでも“ビュー”というまだ説明していない用語を使っています。今の時点では、細かい点は気にせずに概要だけ理解できれば十分です。気にせずに先にすすんでください。

7. main.m
main関数を含むコードファイルです。Objective-CもCと同じくmain関数からプログラムがスタートする決まりになっています。このファイルのコードは次のようになっています。
// // main.m // MyImage // // Created by Fumihiro Tezuka on 09/10/10. // Copyright viva Cocoa 2009. All rights reserved. // #import <Cocoa/Cocoa.h> int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **) argv); }
コード説明
・9行目
#importでCocoaフレームワークを読み込んでいます。Cocoaフレームワークを読み込むことによってAppKitフレームワークとFoundationフレームワークを一緒に読み込むことになります。

・11行目
“NSApplicationMain”という関数を呼び出しています。この関数を呼び出すことによって“メインループ”が開始されアプリケーションとしての“イベント”の受け取りなどができるようになります。“メインループ”と“イベント”ついては事項で説明しますが、このNSApplicationMainが終了してmain関数がreturnを返すとき、そのアプリケーションは終了します。逆に言えば、アプリケーションが起動している間は、このNSApplicationMain関数の中にいることになります。
 なお、Cocoaフレームワークを使ったプログラミングでは、このmain.mファイルのコードを変更することはまずありません。本書でもこのファイルを変更することはありませんのでmain.mについての説明は本書を通してこれで終わりとさせてもらいます。
各ファイルの説明にもどります。
8. MainMenu.xib (English)
シングルトンアプリケーションとはメインウィンドウを一つだけ持つアプリケーションのことです(操作パネルなどの補助的ウィンドウは別途に複数持つことが出来ます)。このファイルには、その唯一のメインウィンドウを含む、そのアプリケーションのすべてのGUIがバイトデータとして格納されています。
 また、InfoPlist.string (English) と同じく、このファイルをコピー(複製)することによって日本語版などのバージョンを作っていきます。

9. MyImage.app
実行ファイルです。まだ一度もビルドしていない場合やこの実行ファイルを削除した場合、つまり実行ファイルが存在していない場合は赤字で表示されます。

10. MyImage_Prefix.pch
フレームワークを読み込むために使われています。今はCocoaフレームワークしか読み込んでいません。

10. MyImageAppDelegate.h
11. MyImageAppDelegate.m
この2つのファイルはXcode 3.2.1からCocoa Applicationにデフォルトで用意される事になった新しい“クラス”のファイルです。詳しくは第5章で説明することになりますが、本書では日本時間の2009年10月10日に発表されたこのXcode 3.2.1を使って学習をすすめていきます。またクラスについては第3章で説明いたします。

■ メインループとイベント

 “メインループ”は“イベントループ”と呼ばれることもあります。構造的にはwhileループのかたちになっており、条件が偽となるまではアプリケーションの起動が続く事になります。このイベントループを終わらせる偽の条件が“Quit”(終了)コマンドになります。
 “イベント”はユーザーの「マウスをクリックする」「キーボードのキーを押す」などの操作により発生するアプリケーションへの指示のことを表す言葉です。なおイベントは必ずしもユーザーの操作によってのみ発生するとは限っていません。

ユーザインタフェースの作成

 この項ではいよいよGUI(グラフィックユーザインターフェース)を作ってきます。プロジェクトウィンドウの「ファイル名」右ペインから「MainMenu.xib (English)」をダブルクリックしてください(以後、特に必要のない場合は(English)を省略してMainMenu.xibと呼びます)。

図 MyImageプロジェクトウィンドウ2

 MainMenu.xibはグラフィックユーザインタフェースを作成するための Interface Builder というアプリケーションのファイルです。このファイルをダブルクリックすると Interface Builder が起動してファイルが開かれます。ファイルの中にはこれからの作業対象となる空白のウィンドウもひとつ含まれています。GUIのパーツはウィンドウの上(中)に配置しないと表示されません。難しく言うと、ウィンドウの表示領域内に配置したGUIパーツしか見えませんし、機能もしません。またパネルやシートもウィンドウの一種です。これらのパネルやシートと区別するためにアプリケーションにとって作業の対象となるウィンドウをメインウィンドウと呼びます。このメインウィンドウとそのほかのウィンドウの関係については第8章で説明いたします。

 MainMenu.xibファイルをはじめて開いた時には、おそらく次のような配置でInterface Builderが起動すると思います。

図 Interface Builder起動画面1

 この配置は作業のやりやすいように各ウィンドウやパネルを移動してもアプリケーションに影響を与えることはありません。

図 Interface Builder起動画面2


■ 各ウィンドウとパネルの説明

 左から
ライブラリパネル GUIパーツなどをこのパネルから選びます
MainMenu.xibウィンドウ このxibファイルの本体になります
MainMeneウィンドウ(バー) アプリケーションのメニューの設定をします
メインウィンドウ  
インスペクタパネル GUIパーツの詳細な設定をこのパネルで行います

【Xcode 3.1の場合は】

 次の図のような表示になります。右端がライブラリパネルでその左隣がインスペクタパネルになります。

図. Interface Builder起動画面 Xcode 3.1

[注意]

 時々、Interface Builderの起動時にライブラリパネルかインスペクタパネルが表示されない場合があります。その場合はInterface Builderの”Tools“メニューで表示させたいパネルを選びます。

図 Tools - Library

■ユーザインタフェースの作成

 各パネルやウィンドウの簡単な説明が終わったところでMyImageアプリケーションのユーザインタフェースを作っていきます。次の手順に従ってライブラリパネルからImage Wellというビューを探します。Image Wellはその名前のとおり画像イメージを表示するビューパーツです。

  1. ライブラリパネルで一番左の“Objects”タブを選び“Library”プルダウンメニューをクリックします。

    図 Library - Image Well1

  2. プルダウンメニューからLibrary→Cocoa→Views & Cellsを選びます。

    図 Library - Image Well2

  3. 下のグループからImage Wellを探します。似たような名前で“Image Cell”というのがあります。間違わないように注意しましょう。

    図Library - Image Well3

 Image Wellが見つかりましたらメインウィンドウまでドラッグ&ドロップします。ウィンドウへドラッグしていくと青い点線が表示されるポジションがあります。この点線はApple Human Interface Guide LineというApple社が取り決めたビューパーツを配置する位置を表しています。ビューパーツを配置する場合はこのガイドラインにしたがうように配置することが推奨されています。またビューパーツはこのガイドラインに吸い寄せられるようにスナップしますので配置しやすくなっています。

図 Image Wellレイアウト1

 配置したImage Wellを良く見ると四隅と四辺に小さなドットが付いています。このドットをドラッグしてImage Wellの大きさを変えることができます。

図 Image Wellレイアウト2

 ドットをドラッグしてImage Wellをウィンドウ一杯まで広げます。ウィンドウの四辺のぴったりの位置にも青い点線のガイドラインが現れます。そのガイドラインを目標にするとウィンドウと同じ大きさにImage Wellを広げることができます。


正確にはウィンドウの四辺よりそれぞれ1ピクセルずつ大きいサイズになります。結果としてウィンドウよりもタテヨコともに2ピクセルずつ大きいサイズになります。

 なおメインウィンドウのタイトルは、プロジェクト名がそのままタイトルになりますが、このメインウィンドウのタイトルは後から簡単に変更が出来ます。またアプリケーション名もプロジェクト名がそのままアプリケーションの名前になりますが、このアプリケーションの名前も簡単ではありませんが後から変更することができます。


【Xcode 3.1の場合は】

 メインウィンドウのタイトルはデフォルトで常に”Window“になります。変更するにはウィンドウのタイトルバーあたりクリックしてインスペクタパネルがWindowを指すようにします。そしてAttributesタブを選んで”Title”欄に任意のタイトル名を記入します。

図 Image Wellレイアウト3

 ウィンドウのImage Wellが選択された状態でインスペクタパネルのタイトルを見ると“Image View”○○になっています。Image Wellは正確にはImage Viewクラスの“インスタンス”になりますが、まだクラスについてもインスタンスについても説明していません。今は、「現在どのビューパーツで作業をしているかを常にインスペクタパネルのタイトルで確認をとりながら作業をする」ということを覚えてください。

 次にこのインスペクタパネルでImage Wellの設定を行います。


■ Image View Attributes の設定

  1. 次の図のように一番左の“Attributes”タブを選ぶとパネルのタイトルがImage View Attributesに変わります。

  2. “Scaling”では“Proportionally Up or Down”を選びます。これによりImage Viewの中の画像は縦横比を保ちながら拡大縮小するようになります。

  3. “Border”では“Groove”を選びます。Image Wellの背景色は基本的に白色になっていて変更することはできません。しかしGrooveを選ぶと背景色がグレーになります。

  4. 最後に“Editable”にチェックをいれます。Editableにすることによって画像をImage Wellへドラッグ&ドロップして表示させることができるようになります。

残りの設定はデフォルトのままで構いません。


Editableにチェックを入れると“State”グループの“Refuses First Responder”のチェックが外れますが、それで合っています。気にせずに先に進んでください。

図 Image View Attributes


Scaling項目

 Scalingは拡大縮小にどのように対応するかを設定する項目です。Image Wellの場合はImage Wellの中に表示させている画像の拡大縮小をどのようにするかを設定することになります。

・Proportionally Down 縦横比を保ちながら縮小のみに対応
・Proportionally Up or Down 縦横比を保ちながら拡大縮小に対応
・Axes Independently 縦横比を無視して拡大縮小に対応
・None 拡大縮小には対応しない

■ Image View Sizeの設定

 次にサイズの設定を行いたいと思います。

1. インスペクタパネルの左から3つめの“Size”タブをクリックします。タイトルがImage View Sizeに変わります。

2. “Autosizing”を図Image View Sizeのように設定してください。この設定によりImage Wellの四辺とウィンドウの四辺の距離は常に同じに保たれ、Image Wellのタテとヨコの大きさは可変することになります。つまりウィンドウの拡大縮小に合わせてImage Wellも拡大縮小することになります。

図 Image View Size

 以上でInterface Builderでの作業は完了しました。“File“メニューから“Save”を選ぶか“command + S”でInterface Builderでの作業を保存します。


 Interface Builderにはアプリケーションをビルドせずにユーザインタフェースの見た目と動作をシミュレートできる機能があります。Fileメニューから“Simulate Interface”を選ぶか、“command + R”ショートカットキーを押してください。“Cocoa Simulator”が起動します。

 ここで注目して欲しい事は、MyImageウィンドウの表示位置です。作業を行っていた位置とは違います。シミュレートの位置はInterface Builderが初めて起動した時のメインウィンドウの位置です。このようにアプリケーション実行時のメイウィンドウの位置は作業時の位置とは連動していません。メインウィンドウの表示位置を変更する方法は追って説明していきます。

 では、MyImageウィンドウに何か画像をドロップします。たとえば起動ディスクの“ライブラリ”フォルダの中の“Desktop Pictures”から何か選んでドラッグ&ドロップしてみてください。

図 Cocoa Simulator1

 画像がMyImageウィンドウに表示されます。次にリサイズボタンをクリックしてみてください。

図 Cocoa Simulator2

 MyImageウィンドウがデスクトップ一杯まで広がります。そして中の画像もそれに合わせて拡大します。ただし画像のアスペクト比(縦横比)は守られたままになります。

図 Cocoa Simulator3

 シミュレータでのテストが終わりましたら“Cocoa Simulator”メニューから“Quit Cocoa Simulator”を選ぶか“command + Q”ショートカットキーを押してシミュレータを終了します。

 シミュレータが終了すると自動的にInterface Builderに戻ります。ファイルの保存をまだしていない場合は保存をしてInterface Builderも終了してください。

ビルドと実行

 簡易画像ビューワーMyImageをビルド(コンパイル&リンク)します。MyImageプロジェクトウィンドウでツールバーのビルドと実行をクリックします。

図 MyImageプロジェクトウィンドウ3

 ビルドが成功するとMyImageアプリケーションが起動します。このMyImageの動作はシミュレータの時とまったく同じです。そしてほぼすべてのフォーマットの画像を表示することができます。表示させる画像がなければ取りあえずデスクトップ用のイメージや写真などをMyImageウィンドウへドラッグ&ドロップして表示させてみましょう。起動ディスク→ライブラリ→Desktop Picturesと進んで、今度は“Black & White”フォルダの“Sea Mist”を表示させてみました。

図 MyImage実行画面1

 リサイズボタンをクリックしてウィンドウを最大化してみます。

図 MyImage実行画面2

 表示する画像を変えるには別の画像をMyImageウィンドウへドラッグ&ドロップします。


 おめでとうございます。これで簡易画像ビューワー MyImageが完成いたしました。お疲れ様でした。



目次 < 前ページ 次ページ >


Copyright 2006 - 2010 viva Cocoa. All Rights Reserved.