4

CALayer次のコードを使用して、のコンテンツをアニメーション化します。

CAKeyframeAnimation *countanimation = [CAKeyframeAnimation animation];
NSArray *images = [NSArray arrayWithObjects:(id)[UIImage imageNamed:@"number3"].CGImage, 
                        (id)[UIImage imageNamed:@"number2"].CGImage, 
                        (id)[UIImage imageNamed:@"number1"].CGImage, nil];
[countanimation setKeyPath:@"contents"];
[countanimation setValues:images];
[countanimation setCalculationMode:kCAAnimationDiscrete];
[countanimation setDuration:3.0f];
[countanimation setDelegate:self];
[countanimation setAutoreverses:NO];
[countanimation setRemovedOnCompletion:NO];
[countanimation setValue:@"Countdown" forKey:@"name"];
[countDown addAnimation:countanimation forKey:nil];

そして、アニメーションが停止したときにレイヤーを非表示にしたい:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    if([[anim valueForKey:@"name"] isEqual:@"Countdown"])
    {
        [countDown setHidden:YES];
        ...
    }
}

問題は、レイヤーが元の画像 (number3) で一度点滅し、その後非表示になることです。

removedOnCompletionに設定しているのにレイヤーが元に戻る理由を知りたいですNO

4

4 に答える 4

5

FillModeプロパティとプロパティを組み合わせて使用​​すると、removedOnCompletion終了後に最初のフレームをそのコンテンツに戻すことができますrepeatCount

[countanimation setFillMode:kCAFillModeBoth];
[countanimation setRemovedOnCompletion:NO];

この 2 行のコードは、必要な結果を得るのに役立つと思います。

于 2012-09-26T05:55:50.863 に答える
1

以前 animation.fillMode = kCAFillModeForwards;はこの問題を修正していました

于 2015-07-31T10:50:53.080 に答える
0

元の画像を1番に置き換えたところ、問題は解決しました。

于 2012-08-27T03:08:29.597 に答える