0

レイヤーを回転させるために CAKeyFrameAnimation を実行しようとしています:

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

    animation.duration = 1.0;
    animation.cumulative = NO;
    animation.repeatCount = 1;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;

    animation.values = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0 * M_PI],
                        [NSNumber numberWithFloat:0.5 * M_PI],
                        [NSNumber numberWithFloat:0.3 * M_PI], // animation stops here...
                        [NSNumber numberWithFloat:0.8 * M_PI], // ignored!
                        [NSNumber numberWithFloat:0.7 * M_PI], nil]; // ignored!

    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.0],
                          [NSNumber numberWithFloat:0.2],
                          [NSNumber numberWithFloat:2.0], // ignored!
                          [NSNumber numberWithFloat:1.5], // ignored!
                          [NSNumber numberWithFloat:2], 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"];

コメントでわかるように、アニメーションはすべてのキー フレームではなく 2 つのキー フレームのみを実行します。そこにどのような値を入れても、アニメーションは 2 つ以上のキー フレームを実行することはありません。

何が問題なのですか?

4

2 に答える 2

4

animation.duration を 1 に設定しても、keyTimes が 0、0.2、そして 2 である可能性があります... つまり、アニメーションは 3 番目の値に達する前に停止します。

于 2010-02-02T13:46:07.830 に答える
1

keyTimes 配列には、0.0 から 1.0 まで増加する値のみを含める必要があります。これらはアニメーションの進行状況のパーセンテージであり、生の秒数ではありません。そのため、keyTime 0.5 に一致するキーフレームは、アニメーションの 1/2 秒ではなく、アニメーションの途中で発生します (もちろん、1 秒のアニメーションがない場合)。

于 2010-08-10T15:57:50.867 に答える