2013-05-07 10 views
5

मैं एक छवि से अधिक चमक प्रभाव पैदा करने के लिए के रूप में वीडियो Sparkle Effect एक ही रास्ता मैं प्रत्येक कण अलग एनिमेट कोर एनीमेशन का उपयोग कर यह कर के बारे में सोच सकता है में दिखाया गया है चाहते हैं, लेकिन है कि अक्षम करने के साथ ही समय लगता होगा। क्या कोई अन्य तरीका है जो मैं कर सकता हूं?चमक प्रभाव आईओएस

+0

"कोर एनीमेशन का उपयोग करके अलग-अलग प्रत्येक कण को ​​एनिमेट करना अक्षम और समय लेने वाला होगा" - तो क्या आपने इसे बेंचमार्क किया? –

उत्तर

10

यहां एरिका सुसान की कुक बुक का समाधान है। यह आपके लिए काम करता है।

आप उपयोगकर्ता स्पर्शों के साथ मिलकर उत्सर्जकों का उपयोग करके अपने इंटरफेस में दृश्य रुचि जोड़ सकते हैं। निम्नलिखित वर्ग दर्शाता है कि कैसे अपने जीवनकाल पर एक स्पर्श का पालन करना है, जहां भी उपयोगकर्ता स्क्रीन पर छूता है वहां थोड़ा सा चमक जोड़ता है।

कक्षा शुरू होती है जैसे ही उपयोगकर्ता स्क्रीन को छूता है, एक एमिटर परत और एक एमिटर सेल बना देता है। कोशिका कणों को परिभाषित करती है - उनका रंग, उनकी जन्म दर, उनका जीवनकाल, वेग, और बहुत आगे।

उपयोगकर्ता के स्पर्श की प्रगति के रूप में, यह कक्षा स्क्रीन से स्पर्श हटा दिए जाने के बाद एमिटर को हटाकर एमिटर के स्थान को अपडेट करती है। यद्यपि यह उदाहरण सिंगल टच इंटरैक्शन के लिए लिखा गया है, लेकिन आप मल्टी-टच इंटरैक्शन के लिए एमिटर की एक सरणी (एक उदाहरण के बजाए) जोड़ने के लिए कोड को आसानी से अपडेट कर सकते हैं।

एमिटर आसानी से आपकी परियोजनाओं में जोड़े जाते हैं और चलाने के लिए कुशल होते हैं। जबकि बहुत अधिक एनीमेशन कभी भी एक अच्छा डिज़ाइन विचार नहीं होता है, लेकिन थोड़ा सा स्पार्कल बुद्धिमानी से जीवन और आंदोलन जोड़ सकता है।

@interface SparkleTouchView : UIView { 
    CAEmitterLayer *emitter; 
} 

@end 

@implementation SparkleTouchView 

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    float multiplier = 0.25f; 

    CGPoint pt = [[touches anyObject] locationInView:self]; 

    //Create the emitter layer 
    emitter = [CAEmitterLayer layer]; 
    emitter.emitterPosition = pt; 
    emitter.emitterMode = kCAEmitterLayerOutline; 
    emitter.emitterShape = kCAEmitterLayerCircle; 
    emitter.renderMode = kCAEmitterLayerAdditive; 
    emitter.emitterSize = CGSizeMake(100 * multiplier, 0); 

    //Create the emitter cell 
    CAEmitterCell* particle = [CAEmitterCell emitterCell]; 
    particle.emissionLongitude = M_PI; 
    particle.birthRate = multiplier * 1000.0; 
    particle.lifetime = multiplier; 
    particle.lifetimeRange = multiplier * 0.35; 
    particle.velocity = 180; 
    particle.velocityRange = 130; 
    particle.emissionRange = 1.1; 
    particle.scaleSpeed = 1.0; // was 0.3 
    particle.color = [[COOKBOOK_PURPLE_COLOR colorWithAlphaComponent:0.5f] CGColor]; 
    particle.contents = (__bridge id)([UIImage imageNamed:@"spark.png"].CGImage); 
    particle.name = @"particle"; 

    emitter.emitterCells = [NSArray arrayWithObject:particle]; 
    [self.layer addSublayer:emitter]; 
} 

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    CGPoint pt = [[touches anyObject] locationInView:self]; 

    // Disable implicit animations 
    [CATransaction begin]; 
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
    emitter.emitterPosition = pt;  
    [CATransaction commit];  
} 

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [emitter removeFromSuperlayer]; 
    emitter = nil; 
} 

- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self touchesEnded:touches withEvent:event]; 
} 

@end 

आदेश एनीमेशन बनाने के लिए spark.png नाम के एक png फ़ाइल बनाने के लिए मत भूलना।

+0

"COOKBOOK_PURPLE_COLOR" – Simulator

+1

के लिए मुझे कौन सी लाइब्रेरी आयात करने की आवश्यकता है, वह अपने काम में प्री सेट रंग का उपयोग करती है ताकि इसे एक वर्ग में इसे accesing के लिए आसान बना दिया जा सके। आप अपनी पसंद के सीजी रंग का उपयोग कर सकते हैं। बीमार [uicolor colorwithred के साथ जाओ: और रंगों और अल्फा या [bicolor colorwithcgcolor को नियंत्रित करें और इसके लिए एक विशिष्ट सीजी रंग सेट करें। वह हिस्सा आप पर निर्भर है। –

+0

धन्यवाद, एक आकर्षण की तरह काम किया, केवल मुझे पता होना चाहिए कि कणों की गति को कैसे कम किया जाए। – Simulator

0

कृपया इस समाधान की जांच करें।

https://github.com/GabriellaQiong/CIS581-Project2-Image-Morphing

CIwarpKernel Kets आप संदर्भ बिंदु के अनुसार एक छवि ताना। छवि मोर्फ़िंग करने के लिए आप यही करना चाहते हैं।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – Bruce

संबंधित मुद्दे