レイヤに画像を貼ってみた。
![Fig.1](https://stat.ameba.jp/user_images/61/a3/10090800834.jpg?caw=800)
baseLayerに部屋の写真、batonLayerにプラスティック定規(学校じゃ棒は転がってね~からな)の写真。
定規の方はアルファチャネル付きPNGなんで、後ろが透けて見えてるっす。
画像の読み込みは
NSBitmapImageRep imageRepWithContentsOfFile
を使う。指定するのは読み込む画像ファイルのパス。今回アプリケーションのリソースディレクトリにある画像なので
NSBundle* mainBundle = [NSBundle mainBundle];
を使うことになる。
Mac OS Xのアプリケーションはバンドルディレクトリと呼ばれる特別なディレクトリで、NSBundle mainBundleはそのインスタンスを作ってるって事になるか。
アプリケーションバンドルディレクトリ下にはリソースディレクトリが存在し、ここにアプリケーションで使う画像やその他の資源を置くことになっているので
[mainBundle pathForResource:@"background-room" ofType:@"jpg"]
とすれば
アプリケーションバンドルディレクトリ/リソースディレクトリ/background-room.jpg
のパスが返される。NSBitmapImageRep imageRepWithContentsOfFileにはこのパスを指定してやればいい。作成されたNSBitmapImageRepインスタンスに対し
[NSBitmapImageRepインスタンス CGImage];
とすることでCGImageインスタンスが作成できるので、あとはレイヤのcontentsに指定してやるだけ。
baseLayer.contents = (id)image;
以上。簡単だ。
プロジェクトへの登録
プロジェクトへの登録はプロジェクトのResourcesグループにドロップするだけ。
![Fig.2](https://stat.ameba.jp/user_images/fd/6f/10090802665.jpg?caw=800)
管理上、画像ファイルは自分のプロジェクトフォルダ内の任意の位置に移動させておいてからやるべし(七人の侍、観たか?つーか、観てくれ。そうでないと心が通じ合えん)。
もちろんドロップ直後に出てくるダイアログでプロジェクト内にコピーを選んでもいいけど...
登録されると自動的にアプリケーションバンドルディレクトリ/リソースディレクトリへのコピー作業も追加されます。確認したい人はターゲットグループのanimation/バンドルリソースをコピーを開くといい。追加されているのがわかる。
![Fig.3](https://stat.ameba.jp/user_images/eb/ae/10090804944.jpg?caw=800)
batonLayerにも定規の写真を割り当てて、最初のようなウィンドウ状態になる。
場面転換処理
で、調子のってきたので、開始時に軽い場面転換処理を入れて、始まりがわかりやすいようにしてみた。
![Fig.4](https://stat.ameba.jp/user_images/29/98/10090805410.jpg?caw=800)
場面転換処理 つまりトランジションはCore Animation プログラミングガイドの関連ドキュメント:アニメーションのタイプとタイミングのプログラミングガイドに簡単な紹介があった。
アニメーションのタイプとタイミングのプログラミングガイド:トランジションアニメーション
これによるとCATransitionを利用すればいいらしいんだけど、かなりあっさりとした紹介。
で、あんまりなんで"[CATransition animation]"でADC内検索をかけるとSlideshowView.mサンプルソースがヒット。これ、かなり参考になるな~。
サンプルソース:CocoaSlides
ほとんど切り貼りでCATransitionを設定し、最後にbaseLayer addAnimationしている。あとは「クォーツの世界」同様乱数で開始時間を特定できないようにして完成~!
------------
サンプルプロジェクト:stick-game.zip
Core Animation プログラミングガイド 日本語訳版
![Fig.1](https://stat.ameba.jp/user_images/61/a3/10090800834.jpg?caw=800)
baseLayerに部屋の写真、batonLayerにプラスティック定規(学校じゃ棒は転がってね~からな)の写真。
定規の方はアルファチャネル付きPNGなんで、後ろが透けて見えてるっす。
画像の読み込みは
NSBitmapImageRep imageRepWithContentsOfFile
を使う。指定するのは読み込む画像ファイルのパス。今回アプリケーションのリソースディレクトリにある画像なので
NSBundle* mainBundle = [NSBundle mainBundle];
を使うことになる。
Mac OS Xのアプリケーションはバンドルディレクトリと呼ばれる特別なディレクトリで、NSBundle mainBundleはそのインスタンスを作ってるって事になるか。
アプリケーションバンドルディレクトリ下にはリソースディレクトリが存在し、ここにアプリケーションで使う画像やその他の資源を置くことになっているので
[mainBundle pathForResource:@"background-room" ofType:@"jpg"]
とすれば
アプリケーションバンドルディレクトリ/リソースディレクトリ/background-room.jpg
のパスが返される。NSBitmapImageRep imageRepWithContentsOfFileにはこのパスを指定してやればいい。作成されたNSBitmapImageRepインスタンスに対し
[NSBitmapImageRepインスタンス CGImage];
とすることでCGImageインスタンスが作成できるので、あとはレイヤのcontentsに指定してやるだけ。
baseLayer.contents = (id)image;
以上。簡単だ。
プロジェクトへの登録
プロジェクトへの登録はプロジェクトのResourcesグループにドロップするだけ。
![Fig.2](https://stat.ameba.jp/user_images/fd/6f/10090802665.jpg?caw=800)
管理上、画像ファイルは自分のプロジェクトフォルダ内の任意の位置に移動させておいてからやるべし(七人の侍、観たか?つーか、観てくれ。そうでないと心が通じ合えん)。
もちろんドロップ直後に出てくるダイアログでプロジェクト内にコピーを選んでもいいけど...
登録されると自動的にアプリケーションバンドルディレクトリ/リソースディレクトリへのコピー作業も追加されます。確認したい人はターゲットグループのanimation/バンドルリソースをコピーを開くといい。追加されているのがわかる。
![Fig.3](https://stat.ameba.jp/user_images/eb/ae/10090804944.jpg?caw=800)
batonLayerにも定規の写真を割り当てて、最初のようなウィンドウ状態になる。
場面転換処理
で、調子のってきたので、開始時に軽い場面転換処理を入れて、始まりがわかりやすいようにしてみた。
![Fig.4](https://stat.ameba.jp/user_images/29/98/10090805410.jpg?caw=800)
場面転換処理 つまりトランジションはCore Animation プログラミングガイドの関連ドキュメント:アニメーションのタイプとタイミングのプログラミングガイドに簡単な紹介があった。
アニメーションのタイプとタイミングのプログラミングガイド:トランジションアニメーション
これによるとCATransitionを利用すればいいらしいんだけど、かなりあっさりとした紹介。
で、あんまりなんで"[CATransition animation]"でADC内検索をかけるとSlideshowView.mサンプルソースがヒット。これ、かなり参考になるな~。
サンプルソース:CocoaSlides
ほとんど切り貼りでCATransitionを設定し、最後にbaseLayer addAnimationしている。あとは「クォーツの世界」同様乱数で開始時間を特定できないようにして完成~!
------------
サンプルプロジェクト:stick-game.zip
Core Animation プログラミングガイド 日本語訳版