SORU
11 Temmuz 2012, ÇARŞAMBA


CAEmitterLayer dokunmatik olaylar üzerinde rastgele istenmeyen parçacıkları yayar

CAEmitterLayer bir konfeti etkisi yapmak ayarlamaya çalışıyorum, ve iki konuya rastladım:

  1. 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.
  2. Her emitterCells çizim şeyler ekranında her zaman ben dokunmatik ekran, verici çizer emitterCells (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
19 ŞUBAT 2015, PERŞEMBE


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();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • Skrillex

    Skrillex

    6 NİSAN 2010
  • WhtButterflyLiz

    WhtButterfly

    14 NİSAN 2008