CAEmitterLayer dokunmatik olaylar üzerinde rastgele istenmeyen parçacıkları yayar
CAEmitterLayer
bir konfeti etkisi yapmak ayarlamaya çalışıyorum, ve iki konuya rastladım:
- Her set
birthRate
hücrelerim bir şey sıfırdan başlamak animasyon bir telaş hücre yerleştirilmiş rastgele ekran, animasyon normalde, ve sonra yayıcı devam ediyor yayarlar düzgün sonra. - Her
emitterCells
çizim şeyler ekranında her zaman ben dokunmatik ekran, verici çizeremitterCells
(görünüşte) rastgele yerlerde var olmaması için bir (görünüşte) rasgele bir süre. Verici hiçbir dokunmatik olaylara bağlıdır (yani ben bilerek dokunma olayı hakkında bir şey çizim değilim), ancak katman birden fazla gömülü manzarasına sahip bir görünüm içinde. Dokunmatik, daha fazla hücre.
İşte verici kurmak, ve sonra (stop fonksiyonu çağırdım sonra ekranda musluklar yeni rasgele öğeleri oluşturma durdurma) başlatma ve durdurma için benim kod:
- (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];
}
Konfeti başlatmak için:
- (void)startConfettiAnimation
{
[self.confettiLayer setValue:[NSNumber numberWithInt:10.0] forKeyPath:@"emitterCells.confetti.birthRate"];
}
Ve bunu durdurmak için:
- (void)stopConfettiAnimation
{
[self.confettiLayer setValue:[NSNumber numberWithInt:0.0] forKeyPath:@"emitterCells.confetti.birthRate"];
}
Her şey normal olarak hareket eder ve daha sonra doğum oranı sıfır olarak ayarlandığında, incelikle bitiyor. tekrar, rasgele öğelerin ilk telaş sonra başladı mı bir kere, bu gayet güzel çalışıyor: Sadece dokunma olayları için yanıt gibi görünüyor, ve neden hiçbir fikrim yok. Farklı bir görünüm için emitterLayer ekleme, görünüm, kullanıcı etkileşimi devre dışı bırakmak ve daha sonra ana ekranda bir küme olarak eklemeyi denedim, o da işe yaramadı.
Herhangi bir yardım/fikir çok mutluluk duyacağız!
Teşekkürler Sam
CEVAP
Bu eski bir yazı olduğunu biliyorum, ama ben de bu sorun vardı. Jackslash iyi bu mesaja cevap: iOS 7 CAEmitterLayer spawning particles inappropriately
CACurrentMediaTime ile şimdiki zaman başlayacak yayıcı katman beginTime ayarlamanız gerekir(). Verici zaten geçmişte başlamış oluşur olduğumuz sorun gibi görünüyor.
emitter.beginTime = CACurrentMediaTime();
İOS7 üzerinde enjeksiyon sistemi, geni...
-y-marj metinler üzerinde istenmeyen m...
Nasıl bir dosya Red Hat Linux üzerinde...
9 değil't render box-shadow doğru...
Python rastgele bir boolean mı?...