スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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プログラミングガイド: レイヤスタイルプロパティ

スポンサーサイト

Comment

Post comment

Secret

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。