मैं एक CAEmitterLayer
एक कॉन्फ़ेटी प्रभाव बनाने के लिए स्थापित करने के लिए कोशिश कर रहा हूँ, और मैं दो मुद्दों हुई:CAEmitterLayer स्पर्श इवेंट का यादृच्छिक अवांछित कणों का उत्सर्जन करता है
- जब भी मैं करने के लिए मेरे कोशिकाओं पर
birthRate
सेट एनीमेशन शुरू करने के लिए कुछ गैर-शून्य मुझे स्क्रीन पर यादृच्छिक रूप से रखे गए कोशिकाओं का झुकाव मिलता है, जो सामान्य रूप से एनिमेट होता है, और फिर उसके बाद उत्सर्जक ठीक से उत्सर्जित रहता है। - जब भी
emitterCells
स्क्रीन पर चीजें खींच रहे हैं, जब भी मैं स्क्रीन को छूता हूं, तो एमिटरemitterCells
(यादृच्छिक) यादृच्छिक स्थानों में खींचता है जो एक (प्रतीत होता है) यादृच्छिक समय के लिए मौजूद होता है। एमिटर में कुछ भी स्पर्श स्पर्श घटनाओं से बंधे नहीं है (यानी मैं जानबूझकर टच इवेंट पर कुछ भी नहीं खींच रहा हूं), लेकिन परत एक ऐसे दृश्य में है जिसमें कई एम्बेडेड दृश्य हैं। जितना अधिक मैं स्पर्श करता हूं, उतना अधिक कोशिकाएं दिखाई देती हैं।
यहाँ emitter की स्थापना, और फिर शुरू करने और इसे रोकने के लिए अपने कोड है (एक बार मैं रोक समारोह कहा जाता है, तो नई यादृच्छिक तत्वों बनाने स्क्रीन संघर्ष पर टैप करता):
- (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"];
}
फिर, एक बार यह शुरू हो जाने के बाद, यादृच्छिक तत्वों की प्रारंभिक झुकाव के बाद, यह ठीक काम करता है: सब कुछ सामान्य रूप से एनिमेट होता है, और जब जन्म दर को बाद में शून्य पर सेट किया जाता है, तो यह गहराई से समाप्त होता है। ऐसा लगता है कि टच इवेंट्स का जवाब देना है, और मुझे नहीं पता कि क्यों। मैंने emitterLayer को एक अलग दृश्य में जोड़ने का प्रयास किया है, उस दृश्य पर उपयोगकर्ता इंटरैक्शन को अक्षम कर रहा है, और उसके बाद इसे मुख्य दृश्य के सबव्यूव के रूप में जोड़ना है, और यह काम नहीं कर रहा था।
कोई भी मदद/अंतर्दृष्टि की सराहना की जाएगी!
धन्यवाद, सैम
क्या आपको इसके बारे में कुछ पता चला? मुझे भी वही समस्या है। मुझे एक बहुत अनावश्यक "फीचर" की तरह लगता है। –
शायद इस पोस्ट में आखिरी टिप्पणी के बाद से एक साल बाद किसी को इस समस्या का हल मिल गया? मैं इस समस्या को वेब पर स्थापित हर प्रोजेक्ट में देखता हूं जो CAEmitterLayer क्लास का उपयोग कर रहा है। आप इस ट्यूटोरियल के साथ भी कोशिश कर सकते हैं: http://www.raywenderlich.com/6063/uikit-particle-systems-in-ios-5- ट्यूटोरियल। बस वीसी से हैंडलिंग स्पर्श को हटाएं और उदाहरण के लिए जन्म 1 को कम करें, और कहीं भी टैप करना शुरू करें। टैप के बाद सभी लाइव कण दोगुनी लगते हैं। समस्या केवल सिम्युलेटर में नहीं, डिवाइस पर दिखाई देती है। –