RubyCocoaでアニメーション:自分でアニメーションを設定する

前回やった方法で、一応アニメーションさせることはできたが、実際に自分のプログラムで使おうと思ったら、スピードを変えたり、何回も繰り返したりとか細かい制御をしたいことが多くなるだろう。
そんな場合は、自分でアニメーションオブジェクトを作ってアニメーションさせたいレイヤーに加えてやればいい。

そのために、前回作成したプログラムのdoAnimationを次のように変更する。
def doAnimation(sender)
layer = @view.layer.sublayers.objectAtIndex_(0)
# アニメーションを作成する
theAnimation = OSX::CABasicAnimation.animation
theAnimation.keyPath='position'
theAnimation.duration=5.0
theAnimation.toValue = OSX::NSValue.valueWithPoint_(
OSX::NSPointFromCGPoint(OSX::CGPointMake(400,300)))
# 作成したアニメーションをレイヤーに追加する
layer.addAnimation_forKey_(theAnimation,'move')

end


アニメーションさせるレイヤーを変数layerに代入するところまでは前回と同じ。その後で、theAnimationという名前でアニメーションオブジェクトを作成する。そしてkeyPathにアニメーションさせたいlayerの属性(この場合は、レイヤーの位置=position)を入れる。durationには再生時間を、toValueには最後の値(この場合は目的地の座標)を入れる。
ここで注意しないといけないことは、アニメーションオブジェクトのtoValueに入れる値はNSValueというオブジェクトにする必要があるということだ。前回のコードと同じ感じで、
theAnimation.toValue =OSX::CGPoitnMake(400,300)

と書いてしまうとエラーになってしまう。

ここまでできたら、またビルドして動かして見よう。ゆっくり時間をかけて画像が左下から右上に動くはずだ。さらに、theAnimationにいろいろと値を設定することで、アニメーションの動きを変更することができる。例えば同じ動きを繰り返す場合は、
theAnimation.repeatCount=3

とrepaatCountに回数を代入する。また、動いた後に元の位置にアニメーションしながら戻ってくるようにするには、
theAnimation.autorevers=true

と指定する。また、timingFunctionを指定すると、アニメーションの加速/減速を指定することもできる。以下は、加速と減速を指定した場合である。この設定を追加すると、動き始めはゆっくりで次第に加速し、停止するときに再び減速するアニメーションが表示できる。
theAnimation.timingFunction =
OSX::CAMediaTimingFunction.functionWithName_(
OSX::KCAMediaTimingFunctionEaseInEaseOut)

 このとき、ひとつ注意しておくことがある。
OSX::KCAMediaTimingFunctionEaseInEaseOutというのは、CoreAnimationが用意している定数なのだが、Objective-CではkCAMediaTimingFunctionEaseInEaseOutと先頭は小文字で定義されている。だが、Rubyの言語仕様では、定数は先頭一文字が大文字にしないとならない。そして、XCodeでコード補完機能を使っていると、小文字で書かれてしまい、そのまま実行するとそこでエラーになってしまう。私はこれでずいぶん悩んだ(^^;

 今回と前回は位置の移動をアニメーションしてみたが、CoreAnimationでできるのはこれだけじゃない。例えば透明度を変化させたい場合は、

theAnimation.keyPath='opacity'
theAnimation.duration=5.0
theAnimation.toValue = OSX::NSNumber.numberWithFloat(0.5)

とkeyPathに'opacity'を入れてやり、toValueに変化させたい値を入れればよい。

 アニメーションできる属性にどんなものがあり、それぞれどんな意味をもっているかはアップルの次のドキュメントを参照するといい。

Core Animationプログラミングガイド: アニメーション化可能プロパティ
Core Animationプログラミングガイド: レイヤスタイルプロパティ

タグ : CoreAnimation RubyCocoa

RubyCocoaでアニメーション

 今年に入ってからちょっとずつCoreAnimationをいじっていたのだが、PyObjCでCoreAnimation入門というのを見て、Rubyからも使えそうだということがわかり、ちょうどRubyCocoaにも手を出そうかと考えていたところなので、試して見た。

 とりあえず、RubyCocoaに関してはチュートリアルを見て、だいたいの雰囲気を掴むことに成功。そして、CoreAnimationについては、木下さんの解説記事を見ながら、同じような感じでやってみたら、割と簡単に動いた。ここまでは、ある程度MacやRubyでコード書いたことがあれば、到達できるんじゃないかな。
 というわけで、ドキュメント読みながら、いろいろ試行錯誤中。明日あたりから、エントリーに上げて行きます。もうちっと早めにやるはずだったんだがな(^^;

タグ : CoreAnimation RubyCocoa

日本語化されてる!

 アップルのデベロッパーサイトでCore Animationのプログラミングガイドが日本語化されてる! 関連してこっちもアニメーションのタイプとタイミングのプログラミングガイドの紹介
ちょっと前から、ちょこちょこ眺めたりしてたんだけど、やっぱり翻訳されてたほうが楽でいいな。
 後で一通り目を通しておこう。

今年の冬休み自由研究

 一年前の年末年始は、DashCodeをいじって遊んで過ごしたのであるが、今年気になっているのは、やっぱりこっち。
Leopardのアニメーションを簡単実装! Core Animationを使いこなす
 OSレベルでサポートされたアニメーション機能というのは、実は本職の方でも結構気になる存在であったりするのだ。ちょろちょろとドキュメントは読み始めてはいるのだけど、こうやって日本語で読めるチュートリアルがあるとやってみよう、って気になるよね。

 まだ、ドキュメントを斜め読みしてる段階であるけれど、それでもこのCoreAnimationというフレームワーク、良く考えて作り込まれているというのがわかる。一年前同様に、調べたことはこちらにエントリーとして上げよう。プログラミングの話題が、冬休みの宿題化している(^^;

正式SDK来たー

すげえ忙しいけど、これだけは書かずにいられない。iPhone及びiPod Touch用の正式ネイティブSDKのリリースがアナウンスされました。それもジョブズご本人様から(驚喜)
実際に手に入るのは来年の二月ごろで、実際にどんなものになるのかはまだ全然分からないけれども、これはほんとに楽しみ。
この辺見てると、とにかく楽しそうなのよ。レパード発売に合わせてなんかアナウンスがあるんじゃないか、という憶測はどうやら正しかったみたいだねぇ。

たのしいCocoaプログラミング

 OS-XになってからのMacにはもれなくプログラムを作るためのソフトが一式ついてくるというのはどのくらいの人が知っているのだろう。改めてソフトを揃えたりしなくてもいいというのは大変ありがたいのだけど、やっぱりプログラミングを始めるというのは敷居が高いのか、Macのプログラマー人口っていうのはあんまり高くない。
 敷居が高くなっている原因の一つは、日本語で読める情報が少ないというのもあると思う。こういうのって最初の一歩を踏み出すのが大変なんだよね。だからいい入門書というのが揃っているかどうかはずいぶん大きいと思う。

 そんなわけで、もうすぐ発売になる「たのしいCocoaプログラミング」を紹介。いままでもCocoaの入門書はあったけれど、それらはある程度のC言語の知識を前提としていた。けれどもこの本は、本当にこれからはじめてプログラムを始めようという人を対象としている。
 ということで、Macを持っていて、ちょっとでもプログラムを組んで見たいとか思っている人はチェックして見てはどうだろう。著者であるHDMTの木下さんはアップルのCocoaセミナーの講師もされている方である。

 いま、プレゼントキャンペーン中。

タグ : アップル

プロフィール

Author:うちゃ
FC2ブログへようこそ!

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
カレンダー
10 | 2008/11 | 12
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
FC2カウンター
ブロとも申請フォーム

この人とブロともになる

ユーザータグ

PSY・S 尋秦記 アップル 大旗英雄伝 碧血剣 武侠ヒロイン 笑傲江湖 Dashcode 種ともこ 射雕英雄伝 雪山飛狐 ウルトラマン 断仇谷 七剣下天山 仮面ライダー CoreData 遊佐未森 RubyCocoa CoreAnimation 坂本真綾 KOKIA ハチクロ かの香織 中森明菜 BARBEEBOYS スピッツ 神雕侠侶 QuartzComposer 蒼井優 PSY・S 土岐麻子 東周列国 ZABADAK SION 連城訣 Grapher 森口博子