【问题标题】:Changing CAEmitterCell properties of CAEmitterLayer after emission starts发射开始后更改 CAEmitterLayer 的 CAEmitterCell 属性
【发布时间】:2013-10-24 18:31:51
【问题描述】:

当我第一次设置发射器时,我可以这样做:

self.cell = [CAEmitterCell emitterCell];
self.cell.yAcceleration = 20;
...
self.emitter.emitterCells = [NSArray arrayWithObjects:self.cell,nil];

但是假设我创建了一个 5 秒后触发的计时器,我会这样做:

- (void)timerFired
{
    self.cell.yAcceleration = -10;

}

计时器触发,但 CAEmitterCell 的 yAcceleration 没有改变。或者至少屏幕上的粒子发射没有任何变化。如何让 CAEmitterCell 尊重我对其属性所做的更改?

【问题讨论】:

    标签: ios particle-system caemitterlayer caemittercell


    【解决方案1】:

    这不是很明显,但这是解决方案:

    [self.emitter setValue:[NSNumber numberWithFloat:-10.0]
                   forKeyPath:@"emitterCells.cell.yAcceleration"];
    

    其中“单元格”是此处给出的名称:

    [self.cell setName:@"cell"];
    

    【讨论】:

    • 我很困惑。 [self.cell setName:@"cell"] 行在哪里,上面引用了哪里?你的意思是说应该是[self.cell setName:@"NAME"];然后 [self.emitter setValue:... forKeyPath:@"emitterCells.NAME.yAcceleration"];写的答案让我感到困惑,因为单元格是一个通用术语,我想知道您是否正在修改密钥路径?
    • @Cindeselia 后面的部分只是为了澄清他们案例中的单元格名称是单元格。如果你给你的名字命名为“foo”,那么 keyPath 就是“emitterCells.foo.yAcceleration”。
    【解决方案2】:

    当你用一个新的单元格初始化self.emitter时,对象会被保留,所以..当你用一个定时器改变cell.yAcceleration时,self.emitter的单元格不能被改变,self.cell.yAcceleration有已经改过了,所以你应该使用self.emitter的key path。

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多