तो यह अच्छा है कि आपने यहां चीजों को समझ लिया है, लेकिन आपके अपने प्रश्न के उत्तर में कुछ त्रुटियां हैं। मुझे कुछ चीजों को सही करने दें:
फ्रेम गुण एनिमेटेड हो सकता है - बस स्पष्ट एनीमेशन के साथ नहीं। आप एक दृश्य की जड़ परत के अलावा किसी अन्य परत के लिए निम्न करते हैं, फ्रेम ठीक चेतन जाएगा:
[CATransaction begin];
[CATransaction setAnimationDuration:2.0f];
[animationLayer setFrame:CGRectMake(100.0f, 100.0f, 100.0f, 100.0f)];
[CATransaction commit];
याद रखें कि एक परत पर एक संपत्ति की स्थापना डिफ़ॉल्ट से है कि संपत्ति परिवर्तन चेतन होगा। वास्तव में आपको संपत्ति परिवर्तन पर एनिमेशन अक्षम करना होगा यदि आप इसे एनिमेट नहीं करना चाहते हैं। (बेशक यह केवल तभी सच है यदि आप दृश्य की मूल परत के अलावा एक परत को एनिमेट कर रहे हैं।) यदि आप एक स्पष्ट एनीमेशन का उपयोग करने की आवश्यकता है तो आप दोनों स्थिति और सीमाओं को एनिमेट करने में सही हैं।
आप एक UIView पर फ्रेम निहित एनीमेशन का उपयोग कर चेतन कर सकते हैं:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3.0f];
[[self view] setFrame:CGRectMake(45.0f, 45.0f, 100.0f, 100.0f)];
[UIView commitAnimations];
यह दृश्य के वर्तमान फ्रेम से चेतन (सीमा और स्थिति) एक्स = 45.0, y = 45.0, w = 100.0 करने के लिए , एच = 100.0।
ऐसा लगता है कि आप एनीमेशन और परत के बीच के अंतर को भी गलत समझ सकते हैं। आप परतों में एनिमेशन जोड़ते हैं, लेकिन एक परत में एनीमेशन जोड़ना स्वचालित रूप से उस संपत्ति को सेट नहीं करता है जिसे आप एनिमेट कर रहे हैं।
कैलियर मॉडल ऑब्जेक्ट्स हैं। उनमें उस परत के बारे में जानकारी होती है जो अंततः स्क्रीन पर प्रदान की जाती है। आप एक परत की संपत्ति सेट कर सकते हैं यदि आप उस संपत्ति को वास्तव में उस मान में रखना चाहते हैं। यदि आप केवल संपत्ति को एनिमेट करते हैं, तो यह केवल एक दृश्य प्रतिनिधित्व होगा और वास्तविक नहीं होगा - यही कहना है कि यह मान परत के मूल मूल्य पर वापस आ जाता है क्योंकि आपने वास्तव में इसे कभी नहीं बदला है।
जो मुझे अगले बिंदु पर ले जाता है। आप ने कहा:
उपयोग "animation.removedOnCompletion = नहीं; animation.fillMode = kCAFillModeForwards," यह सुनिश्चित करें कि मूल्यों एनीमेशन
इस के अंत पर reseted नहीं कर रहे हैं वास्तव में सही नहीं है। ये दो मान एनीमेशन को अंतिम स्थिति दृष्टि से पर बने रहने का कारण बनते हैं, हालांकि, परत के वास्तविक मान परिवर्तित नहीं हुए हैं। वे अभी भी सटीक वही मान हैं जब आप एनीमेशन शुरू करते थे। सामान्य रूप से (कुछ अपवादों के साथ) आप इन दो पैरामीटर का उपयोग नहीं करना चाहते हैं क्योंकि वे दृश्य केवल हैं। आप जो चाहते हैं वह वास्तव में उस संपत्ति के लिए परत मान सेट करना है जिसे आप एनिमेट कर रहे हैं।
कहें, उदाहरण के लिए, कि आप एक स्पष्ट एनीमेशन का उपयोग करके अपनी परत की स्थिति को एनिमेट करना चाहते हैं। यहां वह कोड है जो आप चाहते हैं:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithCGPoint:CGPointMake(70.0f, 70.0f)]];
[animation setToValue:[NSValue valueWithCGPoint:CGPointMake(150.0f, 150.0f)]];
[animation setDuration:2.0f];
// Actually set the position on the *layer* that you want it to be
// when the animation finishes.
[animationLayer setPosition:CGPointMake(150.0f, 150.0f)];
// Add the animation for the position key to ensure that you
// override the animation for position changes with your animation.
[animationLayer addAnimation:animation forKey:@"position"];
आप एनीमेशन समूह पर भी विचार करना चाहेंगे। एक एनीमेशन समूह के साथ, आप कई एनिमेशन एक साथ समूहित कर सकते हैं और फिर नियंत्रित कर सकते हैं कि वे एक दूसरे से कैसे संबंधित हैं।आपके मामले में आपकी सीमाओं और स्थिति एनिमेशन के लिए अवधि समान है और इसलिए आप जो करने की कोशिश कर रहे हैं वह समूह के बिना ठीक काम करेगा, लेकिन यदि आप एनिमेशन की शुरुआत को ऑफ़सेट करना चाहते हैं, उदाहरण के लिए आप स्थिति नहीं चाहते थे फ्रेम एनीमेशन में एक या दो सेकंड तक शुरू करने के लिए एनीमेशन, आप स्टार्टटाइम स्थिति एनीमेशन के मान को सेट करके उन्हें रोक सकते हैं।
अंत में, मुझे यह जानकर उत्सुकता होगी कि आप UIView पर उपलब्ध निहित एनिमेशन का उपयोग क्यों नहीं कर सके। मैं कोर एनीमेशन कोड के विशाल बहुमत में इनका उपयोग करता हूं और यह नहीं देख सकता कि यह आपकी स्थिति के लिए क्यों काम नहीं करेगा।
सर्वश्रेष्ठ संबंध।
धन्यवाद। लेकिन UIView एनीमेशन समस्या के लिए, यह केवल मेरी परत से संबंधित था। आमतौर पर, मुझे UIView का उपयोग करके एनीमेशन के साथ कोई समस्या नहीं है, लेकिन मेरे मामले में यह अजीब व्यवहार कर रहा था। दृश्य फ्रेम का आकार बदलना आईफोन पर परत का आकार नहीं लेता है (क्योंकि आईफोन पर कोई स्वचालित तंत्र नहीं है, केवल विचारों और सबव्यू के लिए)। तो, आपको इसे "मैन्युअल रूप से" करना है। – Sauleil
अच्छा जवाब! अधिक विस्तृत। अगर मैं कर सकता तो मैं आपको 2 अंक देता। – Soberman