タイトル | 鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(2) | カテゴリー | QuickTime, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版 |
作成日 | 2001/8/18 13:47:22 | 作成者 | 新居雅行 |
■ プロジェクトのファイル構成 続いて、プロジェクトを構成しているファイルを見ていきます。まず、Project Builderでプロジェクトファイル(SimpleCocoaMovie.pbproj)を開きます。 Classesのところに「MyMovieController.h」と「MyMovieController.m」があります。これは、「MyMovieController」というクラスを定義しているものです。このクラスが今回の主役で、アプリケーションのほとんどの制御を行っています。その下の「QTUtils.h」と「QTUtils.c」は、下請けのユーティリティ関数を持っていて、MyMovieControllerから使われます。 続いて、Resourcesを見ると「MovieFile.mov」というQuickTimeムービーのファイルが入っています。これを読みこんで再生します。「MainMenu.nib」には、ユーザーインターフェイス等の定義がなされています。 ■ MainMenu.nibの構成 次に、MainMenu.nibをダブルクリックして、Interface Builderでその中身を見てみましょう。 MainMenu.nibのウィンドウを見ると、ウィンドウのインスタンスが2つあるのが分かります。「Window」がメインの再生用のウィンドウ、「Movie Properties」というのがムービー情報表示用のウィンドウになっています。先程出てきたMyMovieControllerのインスタンスもあります。 では、これらがどういう関係になっているのか、主なアクションの接続を確認してきましょう。メインウィンドウの中にある5つのボタンと音量調整のスライダーのアクションは、全てMyMovieControllerに繋がっています。分かりやすい名前がついていますので、見ていただければ分かると思います。メニューからも直接繋がっています。 次は、主なアウトレットの接続の確認です。こちらも分かりやすい名前になっています。メインのウィンドウだけでなく、情報ウィンドウの方やメニューアイテムにも接続されていることが分かります。これらの図は、ソースを見る時に照らし合わせるとよいと思います。 ■ ムービーの読み込みと表示(MyMovieController.m) それでは、コードの方に入っていきます。このサンプルでは、起動時に自動的にムービーを読みこんでいます。その処理は、MyMovieController.mの「awakeFromNib」メソッドの中に書かれています。 アプリケーションは、起動時にMainMenu.nibを読みこんで、画面にメニューやウィンドウを表示します。そして、MainMenu.nibを読み込み終わったら、MainMenu.nibの中にある全てのインスタンスに向かってawakeFromNibメッセージが送られます。ですので、このメソッドは初期化の処理を書くのに適しているわけです。MyMovieControllerもインスタンスがMainMenu.nibにありますので、起動時にメニューなどと同時に読み込まれて、その後、awakeFromNibメソッドが呼ばれます。 さて、本題のムービーの読み込みと表示ですが、以下の3段階で実現できます。
では、サンプルコードの該当個所を見ていきます。まず、ムービーファイルの存在場所を調べるところです。
Cocoaのアプリケーションの実体はフォルダーで、その中に実行ファイルやnibファイルなどのリソースファイルが収められています。このSimpleCocoaMovieのフォルダー構成を見てみましょう。Finder上でSimpleCocoaMovieを表示させて、コントロールキー+クリックで表示されるメニューから「パッケージの内容を表示」を選択すると中身を見ることができます。 このフォルダーのことをバンドル(束)といい、これを扱うクラスがNSBundleです。mainBundleというメソッドで、アプリケーション自身を表すフォルダーのNSBundleが得られます。pathForResource: ofType:を使うことで、バンドル内の「Contents/Resources/」以下にあるリソースファイルのフルパスを取得することが出来ます。このサンプルでは、「MovieFile」という名前と「mov」という拡張子を持つファイルを見つけて、ファイルパスを返してくれます。 ★ NSBundle : アプリケーション自身のバンドルのインスタンスを作成 [書式] + (NSBundle *) mainBundle [出力] 返り値 : 見つかったファイルのフルパス ★ NSBundle : バンドル内のリソースのファイルパスを取得する [書式] - (NSString *) pathForResource : (NSString *) name ofType : (NSString *) extension [入力] name : ファイル名(拡張子を除いたもの) extension : 拡張子 [出力] 返り値 : 見つかったファイルのフルパス Resourcesフォルダーの下に「English.lproj」というフォルダーがありますが、これは英語圏用のリソースが入るところです。日本語対応したソフトの場合は、Japanese.lprojというフォルダーがあって、この中に日本語化されたリソースファイルが入ります。MovieFile.movは、Resourcesフォルダーの直下にありますが、この場所には言語に依存しないリソースファイルが置かれて共通のリソースとして使われます。 pathForResource: ofType:メソッドは、ローカライズされたリソースが無いかをまずチェックします。この場合は、English.lprojの中を探します。無い場合には、続いてResouces直下のリソースを探します。 次に、得られたファイルパスをURLの形式にします。NSMovieクラスには、ファイルパスからムービーのインスタンスを作るメソッドが無く、URLを扱うクラスである「NSURL」からしか作ることができません。そのため、ファイルパスからfileURLWithPath:を使ってNSURLを作成する必要があります。 ★ NSURL : ファイルパスからNSURLを作成する [書式] + (id) fileURLWithPath : (NSString *) path [入力] path : ファイルパス [出力] 返り値 : 作成したNSURLのインスタンス NSURLが準備できたら、NSMovieを作成します。ソースは以下のようになっています。NSMovieのインスタンスをallocで作成して、initWithURL: byReference:にURLを渡して初期化します。これで、ムービーファイルが読みこまれます。
ここで得られたNSMovieをNSMovieViewにsetMovie:でセットします。数行飛びますが、以下のようなコードがあります。
★ NSMovieView : ムービーをセットする [書式] - (void) setMovie : (NSMovie *) movie [入力] movie : セットするムービー これで、ムービーを画面に表示させることができます。以上の部分のポイントをまとめると、以下のようになります。
[鶴薗賢吾] (続く) | |
関連リンク | Cocoaはやっぱり! |