8

たとえば、私はこのCAKeyFrameAnimationを持っています:

CALayer* theLayer = myView.layer;
    CAKeyframeAnimation* animation;
    animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

    animation.duration = 1.6;
    //animation.cumulative = YES;
    animation.repeatCount = 1;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;

    animation.values = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0 * M_PI],
                        [NSNumber numberWithFloat:(15.0/180.0) * M_PI],
                        [NSNumber numberWithFloat:(30.0/180.0) * M_PI], // animation stops here...
                        [NSNumber numberWithFloat:(45.0/180.0) * M_PI], // ignored!
                        [NSNumber numberWithFloat:(190.0/180.0) * M_PI], nil]; // ignored!

    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.0],
                          [NSNumber numberWithFloat:0.2],
                          [NSNumber numberWithFloat:0.4], // ignored!
                          [NSNumber numberWithFloat:0.8], // ignored!
                          [NSNumber numberWithFloat:1.6], nil]; // ignored!

    animation.timingFunctions = [NSArray arrayWithObjects:
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], nil];

    [theLayer addAnimation:animation forKey:@"transform.rotation.z"];

私が得られないのは:

A)キー時間の値は、アニメーションが開始されてからの絶対経過時間ですか?

B)キー時間の値は、この特定のキーフレームに使用する時間を示しているだけですか?

4

2 に答える 2

13

ドキュメントはここで少し奇妙に表現されていますが、正確です:

配列内の各値は、0.0 から 1.0 までの浮動小数点数であり、values 配列内の 1 つの要素に対応します。keyTimes 配列の各要素は、対応するキーフレーム値の継続時間を、アニメーションの合計継続時間の一部として定義します。各要素の値は、前の値以上である必要があります。

基本的に、各値は、指定されたキーフレームが発生するアニメーションの正規化されたポイントを示します。したがって、キーフレームがアニメーションの 25% にある場合、値は 0.25 になります。ドキュメントの紛らわしい部分は、実際には正規化された時点であるのに、それが期間であることを示していることです。

于 2010-02-02T14:48:35.630 に答える
4

keyTimes の値は、合計期間のパーセントです。有効な値の範囲は 0 ~ 1 (0% ~ 100%) です。最後の値 1.6 は無効です。

例として、キーフレームがアニメーションの 0.8 秒後に発生することになっている場合、1.6 秒の長さを考えると、keyTime は 0.5 になります。

于 2010-02-02T14:48:03.833 に答える