我正在尝试设置一个CAEmitterLayer
来制作五彩纸屑效果,我遇到了两个问题:
- 每当我将
birthRate
单元格上的设置为非零值以启动动画时,我会在屏幕上随机放置一系列单元格,这些单元格可以正常动画,然后发射器在此之后继续正常发射。 - 每当
emitterCells
在屏幕上绘制东西时,每当我触摸屏幕时,发射器emitterCells
都会在(看似)随机的位置(看似)存在(看似)随机的时间量。发射器中的任何内容都与任何触摸事件无关(即我不是故意在触摸事件上绘制任何内容),但该层位于具有多个嵌入式视图的视图中。我接触的越多,出现的细胞就越多。
这是我设置发射器的代码,然后启动和停止它(一旦我调用了停止函数,然后点击屏幕停止创建新的随机元素):
- (void)setupConfetti
{
self.confettiLayer = [CAEmitterLayer layer];
[self.view.layer addSublayer:self.confettiLayer];
[self.view.layer setNeedsDisplay];
self.confettiLayer.emitterPosition = CGPointMake(1024.0/2,-50.0);
self.confettiLayer.emitterSize = CGSizeMake(1000.0, 10.0);
self.confettiLayer.emitterShape = kCAEmitterLayerLine;
self.confettiLayer.renderMode =kCAEmitterLayerUnordered;
CAEmitterCell *confetti = [CAEmitterCell emitterCell];
confetti1.contents = (id)[[UIImage imageNamed:@"confetti.png"] CGImage];
confetti.emissionLongitude = M_PI;
confetti.emissionLatitude = 0;
confetti.lifetime = 5;
confetti.birthRate = 0.0;
confetti.velocity = 125;
confetti.velocityRange = 50;
confetti.yAcceleration = 50;
confetti.spin = 0.0;
confetti.spinRange = 10;
confetti.name = @"confetti1";
self.confettiLayer.emitterCells = [NSArray arrayWithObjects:confetti, nil];
}
开始五彩纸屑:
- (void)startConfettiAnimation
{
[self.confettiLayer setValue:[NSNumber numberWithInt:10.0] forKeyPath:@"emitterCells.confetti.birthRate"];
}
并阻止它:
- (void)stopConfettiAnimation
{
[self.confettiLayer setValue:[NSNumber numberWithInt:0.0] forKeyPath:@"emitterCells.confetti.birthRate"];
}
同样,一旦它开始,在最初的随机元素之后,它工作得很好:一切正常动画,当birthRate稍后设置为零时,它优雅地结束。它似乎只是响应触摸事件,我不知道为什么。我尝试将emitterLayer 添加到不同的视图,禁用该视图上的用户交互,然后将其添加为主视图的子视图,但这似乎不起作用。
任何帮助/见解将不胜感激!
谢谢,山姆