CAEmitterLayer否定开始时间可能吗?

时间:2012-08-21 01:39:13

标签: ios core-animation caemitterlayer

我正试图让CAEmitterLayerCAEmitterCell从他们父母的持续时间中间某处开始动画。这有可能吗?我尝试使用beginTimetimeOffset属性,但我似乎无法使其正常工作。

为子孙后代添加了一些代码:(假设我希望发射器在第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动画下雨,所以我设置单元格来做一个从屏幕顶部开始的“下降”动画。在渲染开始的过程中,我不想在一个“还没下雨”的状态下开始。我想从屏幕已经被雨覆盖的地方开始。

1 个答案:

答案 0 :(得分:1)

beginTime与现在不相关。您需要获取相对于当前图层时间空间的当前时间,您可以使用CACurrentMediaTime()函数获取该时间空间。所以在你的情况下,你会做这样的事情:

emitter.beginTime = CACurrentMediaTime() + 5.f;