- (void)awakeFromNib
{
}
は、起動時に{}でくくった部分を実行するという意味。ここでは
アニメーション素材の準備
素材を動かす黒子の準備
アニメーション実行
が展開されている。
アニメーション素材の準備
CALayer
こいつがアニメーション素材、アニヲタ用語で言うセルですな。つーか今どきセル使ってるのサザエさんくらいか?
今のアニヲタには素直にレイヤの方が通じるのか、Photoshop普及してるし...
セル、昭和の香りですか?
どっちだ。
作成するには
CALayer* layer = [CALayer layer];
とやればいい。
ここではレイヤの背景色特性を緑に設定している。
CGColorRef blackColor = CGColorCreateGenericRGB(0, 1.0f,0,1.0f);
layer.backgroundColor = blackColor;
CGColorRelease(blackColor);
真っ赤に燃える赤が好きなら
CGColorCreateGenericRGB(0, 1.0f,0,1.0f);
を
CGColorCreateGenericRGB(1.0, 0.0f,0,1.0f);
だ!
で、レイヤをどこのビューに表示するか登録しているのが
[view setLayer:layer];
で、この前設定した view を指定しています。
view自体も、もともと自前のレイヤを持ってるのか、そこらへんまだわからないけど、次のsetWantsLayerで設定したレイヤを使うように指定しないといつまでたってもアニメーションは表示されない。
[view setWantsLayer:YES];
素材を動かす黒子の準備
CABasicAnimation
最初から用意されているアニメーションがいくつかあって、自由に利用できるようになっている。
animationWithKeyPath:@"opacity"
は不透明度のアニメーションを設定ということになる。
animation.duration = 1.0f;
はアニメーションする時間
animation.repeatCount = 4;
はアニメーションを繰り返す回数となる。
繰り返す際に変化を行ったり来たりさせる場合に
animation.autoreverses = YES
を指定する。たぶん以下のような動作の違いがでるんじゃないかと思われ。
![反転](https://stat.ameba.jp/user_images/cc/31/10086996398.jpg?caw=800)
ま、
animation.duration = 0.5f;
とか
animation.autoreverses = NO;
ってやって実行してみてちょ。
animation.fromValue = [NSNumber numberWithFloat:1.0f];
animation.toValue = [NSNumber numberWithFloat:0];
は比率の指定、不透明度の現在値を1.0、アニメーション変化最終値を0.0に指定しているんじゃないかな。変更すると透明度の変化量が変わるはずなので、試してみましょう。
アニメーションできる属性は、下のリンク先で説明されているように、不透明度の他に背景色とかいろいろあるみたい。
レイヤスタイルプロパティ
アニメーション実行
addAnimation
レイヤに対してaddAnimationで黒子を追加することで、レイヤはどういった動作をすればいいかわかるので、アニメーションを開始することができる。
[layer addAnimation:animation forKey:@"opacityAnimation"];
こいつを指定してやらないと、レイヤはどういう動作をすればいいかわからないのでアニメーションはしない。しかし
animationWithKeyPath:@"opacity"
で、不透明度のアニメーションってわざわざ作ってるのに、forKey:@"opacityAnimation"でもう一度不透明度のアニメーションって指定してやらないといけないのはなんでだろうね~。謎。
【追記】
調べると、"opacityAnimation"は、後で検索するときのための文字なんで、特になんだっていいみたいです。"opacityAnim"でも"opAni"でも"a0"でもOK。ただしanimationWithKeyPath:@"opacity"の方は"opacity"が動作の種類の指定になっているので、これ以外は不可。
Leopardのアニメーションを簡単実装! Core Animationを使いこなす
レイヤは階層化したり、画像を持ったりいろいろできるみたいでそのレイヤ自体にもいろいろな種類があるみたい。
Core Animation プログラミングガイドの「Core Animationとは?」のCore Animationクラスの図 1 Core Animationのクラス階層にあるCATextLayerとかCAOpenGLLayerとか気にかかるんですが...
------------
サンプルプロジェクト:animation.zip
{
}
は、起動時に{}でくくった部分を実行するという意味。ここでは
アニメーション素材の準備
素材を動かす黒子の準備
アニメーション実行
が展開されている。
アニメーション素材の準備
CALayer
こいつがアニメーション素材、アニヲタ用語で言うセルですな。つーか今どきセル使ってるのサザエさんくらいか?
今のアニヲタには素直にレイヤの方が通じるのか、Photoshop普及してるし...
セル、昭和の香りですか?
どっちだ。
作成するには
CALayer* layer = [CALayer layer];
とやればいい。
ここではレイヤの背景色特性を緑に設定している。
CGColorRef blackColor = CGColorCreateGenericRGB(0, 1.0f,0,1.0f);
layer.backgroundColor = blackColor;
CGColorRelease(blackColor);
真っ赤に燃える赤が好きなら
CGColorCreateGenericRGB(0, 1.0f,0,1.0f);
を
CGColorCreateGenericRGB(1.0, 0.0f,0,1.0f);
だ!
で、レイヤをどこのビューに表示するか登録しているのが
[view setLayer:layer];
で、この前設定した view を指定しています。
view自体も、もともと自前のレイヤを持ってるのか、そこらへんまだわからないけど、次のsetWantsLayerで設定したレイヤを使うように指定しないといつまでたってもアニメーションは表示されない。
[view setWantsLayer:YES];
素材を動かす黒子の準備
CABasicAnimation
最初から用意されているアニメーションがいくつかあって、自由に利用できるようになっている。
animationWithKeyPath:@"opacity"
は不透明度のアニメーションを設定ということになる。
animation.duration = 1.0f;
はアニメーションする時間
animation.repeatCount = 4;
はアニメーションを繰り返す回数となる。
繰り返す際に変化を行ったり来たりさせる場合に
animation.autoreverses = YES
を指定する。たぶん以下のような動作の違いがでるんじゃないかと思われ。
![反転](https://stat.ameba.jp/user_images/cc/31/10086996398.jpg?caw=800)
ま、
animation.duration = 0.5f;
とか
animation.autoreverses = NO;
ってやって実行してみてちょ。
animation.fromValue = [NSNumber numberWithFloat:1.0f];
animation.toValue = [NSNumber numberWithFloat:0];
は比率の指定、不透明度の現在値を1.0、アニメーション変化最終値を0.0に指定しているんじゃないかな。変更すると透明度の変化量が変わるはずなので、試してみましょう。
アニメーションできる属性は、下のリンク先で説明されているように、不透明度の他に背景色とかいろいろあるみたい。
レイヤスタイルプロパティ
アニメーション実行
addAnimation
レイヤに対してaddAnimationで黒子を追加することで、レイヤはどういった動作をすればいいかわかるので、アニメーションを開始することができる。
[layer addAnimation:animation forKey:@"opacityAnimation"];
こいつを指定してやらないと、レイヤはどういう動作をすればいいかわからないのでアニメーションはしない。しかし
animationWithKeyPath:@"opacity"
で、不透明度のアニメーションってわざわざ作ってるのに、forKey:@"opacityAnimation"でもう一度不透明度のアニメーションって指定してやらないといけないのはなんでだろうね~。謎。
【追記】
調べると、"opacityAnimation"は、後で検索するときのための文字なんで、特になんだっていいみたいです。"opacityAnim"でも"opAni"でも"a0"でもOK。ただしanimationWithKeyPath:@"opacity"の方は"opacity"が動作の種類の指定になっているので、これ以外は不可。
Leopardのアニメーションを簡単実装! Core Animationを使いこなす
レイヤは階層化したり、画像を持ったりいろいろできるみたいでそのレイヤ自体にもいろいろな種類があるみたい。
Core Animation プログラミングガイドの「Core Animationとは?」のCore Animationクラスの図 1 Core Animationのクラス階層にあるCATextLayerとかCAOpenGLLayerとか気にかかるんですが...
------------
サンプルプロジェクト:animation.zip