2012-01-23 14 views
8

क्या सिरी बटन चमक एनीमेशन नकल करने का कोई तरीका है? यह बिल्कुल खूबसूरत दिखता है, लेकिन मुझे इस समय कोई जानकारी नहीं है कि कैसे शुरू किया जाए ... क्या ऑनलाइन प्रीफॉर्मेटेड पीएनजी घुमाए गए हैं? या यह CoreAnimation के साथ किया जाता है?सिरी बटन चमक एनीमेशन

उत्तर

9

मेरा मानना ​​है कि सिरी एनीमेशन CAEmitterLayer और CAEmitterCell के साथ बनाया गया है और फिर कोर एनीमेशन के साथ एनिमेटेड है, लेकिन मैं पूरी तरह गलत हो सकता हूं। यहाँ कुछ कोड है कि प्रभाव का अनुकरण है:

// create emitter layer 
self.emitterLayer = [CAEmitterLayer layer]; 
self.emitterLayer.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); 

self.emitterLayer.emitterMode = kCAEmitterLayerOutline; 
self.emitterLayer.emitterShape = kCAEmitterLayerLine; 
self.emitterLayer.renderMode = kCAEmitterLayerAdditive; 
[self.emitterLayer setEmitterSize:CGSizeMake(4, 4)]; 

// create the ball emitter cell 
CAEmitterCell *ball = [CAEmitterCell emitterCell]; 
ball.color = [[UIColor colorWithRed:111.0/255.0 green:80.0/255.0 blue:241.0/255.0 alpha:0.10] CGColor]; 
ball.contents = (id)[[UIImage imageNamed:@"ball.png"] CGImage]; // ball.png is simply an image of white circle 
[ball setName:@"ball"]; 

self.emitterLayer.emitterCells = [NSArray arrayWithObject:ball]; 
[self.view.layer addSublayer:self.emitterLayer]; 

float factor = 1.5; // you should play around with this value 
[self.emitterLayer setValue:[NSNumber numberWithInt:(factor * 500)] forKeyPath:@"emitterCells.ball.birthRate"]; 
[self.emitterLayer setValue:[NSNumber numberWithFloat:factor * 0.25] forKeyPath:@"emitterCells.ball.lifetime"]; 
[self.emitterLayer setValue:[NSNumber numberWithFloat:(factor * 0.15)] forKeyPath:@"emitterCells.ball.lifetimeRange"]; 


// animation code 
CAKeyframeAnimation* circularAnimation = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"]; 
CGMutablePathRef path = CGPathCreateMutable(); 
CGRect pathRect = CGRectMake(0, 0, 200, 200); // define circle bounds with rectangle 
CGPathAddEllipseInRect(path, NULL, pathRect); 
circularAnimation.path = path; 
CGPathRelease(path); 
circularAnimation.duration = 2; 
circularAnimation.repeatDuration = 0; 
circularAnimation.repeatCount = 3; 
circularAnimation.calculationMode = kCAAnimationPaced; 
[self.emitterLayer addAnimation:circularAnimation forKey:@"circularAnimation"]; 

CAEmitterCell और CAEmitterLayer कक्षाएं कई गुण इसलिए अधिक के लिये दस्तावेज की जाँच की है।

+0

self.fireEmitter यहां संदर्भ खो रहा है – Pascalius

+0

कोड कॉपी करते समय मैं उन पंक्तियों को संपादित करना भूल गया हूं। यह self.emitterLayer होना चाहिए था। मैंने इसे ठीक कर दिया है। – jlajlar

+1

आप यह उल्लेख करना भूल गए कि "ball.png" लगभग 5x5 पिक्सेल होना चाहिए ... – Idan

6

मेरा सुझाव है कि आप इसे पीएनजी के साथ करें जो एक-एक करके एक चिकनी एनीमेशन परिणाम प्रदर्शित करता है। यह एक कोडित एनीमेशन प्रोग्रामिंग से आसान तरीका है। बटन पहले ही Arron Hun द्वारा बनाया गया है: Siri Button Photoshop File

बीटीडब्ल्यू। एक स्प्राइट एनीमेशन लागू करने के लिए वास्तव में आसान है:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSArray * imageArray = [[NSArray alloc] initWithObjects: 
          [UIImage imageNamed:@"1.png"], 
          [UIImage imageNamed:@"2.png"], 
          [UIImage imageNamed:@"3.png"], 
          [UIImage imageNamed:@"4.png"], 
          [UIImage imageNamed:@"5.png"], 
          [UIImage imageNamed:@"6.png"], 
          [UIImage imageNamed:@"7.png"], 
          [UIImage imageNamed:@"8.png"], 
          [UIImage imageNamed:@"9.png"], 
          [UIImage imageNamed:@"10.png"], 
          [UIImage imageNamed:@"11.png"], 
          [UIImage imageNamed:@"12.png"], 
          nil]; 
    UIImageView * ryuJump = [[UIImageView alloc] initWithFrame: 
     CGRectMake(100, 125, 150, 130)]; 
    ryuJump.animationImages = imageArray; 
    ryuJump.animationDuration = 1.1; 
    ryuJump.contentMode = UIViewContentModeBottomLeft; 
    [self.view addSubview:ryuJump]; 
    [ryuJump startAnimating]; 
} 

स्रोत: http://www.icodeblog.com/2009/07/24/iphone-programming-tutorial-animating-a-game-sprite/

+0

आपके पास एक बिंदु है ... तो घूर्णन एनीमेशन के लिए पर्याप्त पीएनजी लागू करना एक तरीका होगा। मैंने हमेशा सोचा कि ऐसी चीजें CoreAnimation के साथ बनाई जानी चाहिए क्योंकि इसे संशोधित करना आसान है। लिंक बहुत अच्छा है! मैं उस पर एक नज़र डालेगा! – konturgestaltung

+0

एक नमूना कोड के लिए मेरे संपादित उत्तर पर एक नज़र डालें जो एक स्प्राइट एनीमेशन करता है। शुभकामनाएं – Sbhklr

+0

@ लाइटफोर्स, क्या किसी ने इस PSD फ़ाइल के लिए पीएनजी छवियों का सेट किया है, मेरे पास छवियों को निकालने के लिए कोई फ़ोटोशॉप ज्ञान नहीं है। क्या कोई इसे अपलोड कर सकता है, इसलिए हर किसी के लिए इसका उपयोग करना आसान है। धन्यवाद । – user1227928

1

UIImageView एक संपत्ति animationImages है कि आप चित्रों की एक सूची निर्दिष्ट करने के लिए उपयोग कर सकते हैं कहा जाता है कि यह एक एनिमेटेड GIF की तरह, अनुक्रम में खेलेंगे है । यदि आप प्रभाव को सटीक रूप से नियंत्रित करना चाहते हैं तो शायद यह करने का सबसे आसान तरीका है।

कुछ छवियों का उपयोग करके कोरएनीमेशन के साथ कुछ भी किया जा सकता है और इसके दृश्य को एनिमेट कर सकता है। CGAffineTransformMakeRotation (कोण) का उपयोग कर ट्रांसफॉर्म गुण।

+0

यह मेरा पहला विचार भी था ... एक चमकदार छवि के साथ एक चमकदार और 0 के अल्फा और एक सर्कल आकार में और फिर उस चीज़ को घूर्णन कर रहा है ... लेकिन मुझे यकीन नहीं है कि वह उस चमकदार प्रभाव का उत्पादन करेगा या नहीं। .. क्योंकि यह अभी भी स्थिर दिखता है? – konturgestaltung

+0

आप समय के साथ अल्फा को भी बदलना चाहते हैं, इसलिए अल्फा को अंदर और बाहर फीका करें क्योंकि यह थोड़ा सा पल्स दिखाई देने के लिए घूमता है। –

+0

अच्छा ..... इसे करना चाहिए ..... मैं इसे आज़माता हूं !! – konturgestaltung