7

私はCAEmitterLayers とCAEmitterCells に、親の持続時間の途中からアニメーションを開始させようとしています。これはまったく可能ですか?beginTimeとプロパティをいじってみましたが、timeOffsetうまくいかないようです。

後世のためにいくつかのコードを追加しました:(エミッターを5秒で開始したいとしましょう)

    CAEmitterLayer *emitter = [CAEmitterLayer new];
    // emitter.beginTime = -5.0f; // I tried this
    // emitter.timeOffset = 5.0f; // I also tried this, with beginTime = 0.0, and with beginTime = AVCoreAnimationBeginTimeAtZero
    /* set some other CAEmitterLayer properties */

    CAEmitterCell *cell = [CAEmitterCell new];
    // cell.beginTime = -5.0f; // Then I saw that CAEmitterCell implements CAMediaTiming protocol so I tried this
    // cell.timeOffset = 5.0f; // and this
    /* set some other CAEmitterCell properties */

    emitter.emitterCells = @[cell];
    [viewLayer addSubLayer:emitter];

それでも、アニメーションはエミッターがパーティクルを生成するところから始まります。

私がやろうとしていることを説明するために再度編集しました:

雨をアニメーション化する があるCAEmitterLayerとしましょう。そのため、画面の上部から始まる「落下」アニメーションを実行するようにセルを設定します。レンダリングの開始時に、「まだ雨が降っていない」状態で開始したくありません。画面がすでに雨で覆われているところから始めたいと思います。

4

1 に答える 1

2

beginTimeとは関係ありません。関数を使用して取得できる、現在のレイヤーの時間空間に対する現在の時間を取得する必要がありますCACurrentMediaTime()。したがって、あなたの場合、次のようにします。

emitter.beginTime = CACurrentMediaTime() + 5.f;
于 2012-08-21T03:50:27.027 に答える