[OSX][iOS]Cocoa Animation(独自アニメーションの追加) | Cocoa練習帳

[OSX][iOS]Cocoa Animation(独自アニメーションの追加)

NSAnimatablePropertyContainerプトロコルの続きだ。




分かりやすくする為に、単純な浮動小数点の値をアニメーションの対象にしたいと思う。alphaValueだ。


moveメソッドを以下に変更する。




- (void)move
{
    if (self.isRight) {
        [[self.mover animator] setAlphaValue:1.0];
    }
    else {
        [[self.mover animator] setAlphaValue:0.0];
    }
    self.isRight = !self.isRight;
}



マウスダウンすると、徐々に透明になり、その次は徐々に表示されると思う。




このアニメーションを違いが分かるように、キー・フレームのアニメーションに置換してみよう。


まずは、QuartzCore/QuartzCore.hをimportし、QuartzCore.frameworkをLinkに加える。


キー・フレームのアニメーションは、以下のとおり。




- (CAKeyFrameAnimation *)opacityAnimation
{
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    animation.values = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0],
                        [NSNumber numberWithFloat:0.75],
                        [NSNumber numberWithFloat:0.0], nil];
    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.25],
                          [NSNumber numberWithFloat:0.50],
                          [NSNumber numberWithFloat:0.75], nil];
    return animation;
}



これを対象のNSImageViewに設定する。




self.mover.animations = [NSDictionary dictionaryWithObjectsAndKeys:[self opacityAnimation], @"alphaValue", nil];



プロパティalphaValueを設定すると、これがキーになっているopacityAnimationが取得され、適用される。opacityAnimationは値を0.0、0.75、0.0と変化させるアニメーションなので、点滅するようになったと思う。




この状態で、moveメソッドを前回の内容に戻すとどうなるだろうか?




- (void)move
{
    if (self.isRight) {
        [[self.mover animator] setFrame:self.leftFramePosiotion];
    }
    else {
        [[self.mover animator] setFrame:self.rightFramePosiotion];
    }
    self.isRight = !self.isRight;
}



animationsの内容をopacityAnimationのみにしたので、frameで検索されるアニメーションが見つからないと思ったのだが、default animationに存在するようで、やっぱりアニメーションした。




関連情報
Core Animation for Max OS X and the iPhone



【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)