3

CALayers をフェードインする必要があります。これが私のコードです:

    for(int i = 0; i < viewArray.count; i++)
    {
        CABasicAnimation *fadeIn = [CABasicAnimation animationWithKeyPath:@"opacity"];
        fadeIn.duration = 0.3;
        fadeIn.beginTime = i;
        fadeIn.fromValue = [NSNumber numberWithFloat:0.0];
        fadeIn.toValue = [NSNumber numberWithFloat:0.8];
        fadeIn.removedOnCompletion = NO;
        fadeIn.delegate = self;
        [((CALayer*)[viewArray objectAtIndex:i]) addAnimation:fadeIn forKey:nil];
    }

ただし、最初の 2 つのオブジェクトのみが正しくフェードし、他のすべてのオブジェクトはまったくフェードしません。animationDidStop にブレークポイントを設定すると、開始されていないほとんどのアニメーションが既に停止していることに気付きました (60 秒後に開始されるはずのアニメーションでさえ、最初の数秒以内に停止します)。何が起こっているのか正確にはわかりません。各 CALayer の不透明度を手動で 1 に設定すると正しく表示されますが、アニメーション化すると正しく表示されません。

4

1 に答える 1

4

addAnimation:forKey:への呼び出しは、アニメーションが完了するまで同期的に待機しないため、すべてのアニメーションを同時に開始しています。

私はそれを確認しましたが、次の方法でbeginTimeを設定する必要があるようです

fadeIn.beginTime = CACurrentMediaTime() + i;
于 2011-09-16T08:04:50.047 に答える