2012-12-06 24 views
21

के उपयोग के तहत विचारों बढ़ते मैं एक स्थिति से दूसरे के लिए एक दृश्य ले जाना चाहते हैं, मैं इसेAnimating/autolayout

self.view.center = CGPointMake(100, 200); 

का उपयोग कर तथापि लागू कर सकते हैं, अगर परियोजना autolayout उपयोग कर रहा है, तो देखने के लिए वापस हो जाएगा चलने के बाद मूल स्थिति में:

[self.view.superview setNeedsLayout]; 

तो वास्तव में नई स्थिति में दृश्य कैसे स्थानांतरित करें?

उत्तर

14

यदि आप ऑटोलाउट का उपयोग कर रहे हैं तो आपको बाधाओं को बदलना होगा। जिस तरह से सुझाव दिया गया है वह बाधा के आपके दृश्य नियंत्रक में आउटलेट बनाना है, फिर आप बाधा के निरंतर परिवर्तन को बदलते हैं। यदि आपके पास समय है तो मैं निश्चित रूप से going here की सिफारिश करूँगा और "उदाहरण के द्वारा ऑटो लेआउट" या "ऑटो लेआउट मास्टरिंग के लिए सर्वोत्तम अभ्यास" देख रहा हूं। उन्होंने मुझे बहुत मदद की। मुझे लगता है कि दूर जाने का मुद्दा यह है कि ऑटोलाउट के साथ, अब आप फ्रेम के संदर्भ में नहीं सोचते हैं। तो केंद्र की स्थापना सिर्फ ऑटो लेआउट के साथ काम नहीं करता है। यह सब एक दूसरे से संबंधित विचारों के बारे में है।

+0

यह लग रहा है जैसे कि autolayout का उपयोग कर, एक दृश्य को स्थानांतरित करने के बाद से मैं उस दृश्य – user1687717

+0

यह पहली बार में कठिन है के सभी दुकानों मिलना चाहिए फ्रेम का उपयोग कर की तुलना में कठिन है, लेकिन मैं वास्तव में यह बेहतर पसंद करने के लिए शुरू कर रहा हूँ।आप इसके साथ बहुत कुछ कर सकते हैं –

+0

दूसरा @ClintWarner यहां: Autolayout प्रारंभ में सेटअप करने के लिए एक और अधिक प्रयास हो सकता है, लेकिन यह रखरखाव और पठनीयता के मामले में भारी लाभांश देता है। अब मैं बाधाओं को लागू करने के लिए प्रयोग किया जाता हूं, फ्रेम गणित के साथ काम करना कठिन और निराशाजनक लगता है। – followben

31

AutoLayout सक्षम होने पर, हम FORGET FRAMES और केवल CONSIDER CONSTRAINTS .Yes, यह भी एनिमेट के लिए तुम अब फ्रेम या केन्द्र को बदल सकते हैं चाहिए, दृश्य की जब लेआउट कहा जाता है उनकी मूल स्थिति में वापस लौट जाएगा।

इसके बजाय आपको समान प्रभाव प्राप्त करने के लिए consider changing the constant value of the constraint होना चाहिए।

नीचे दिए गए चित्र की तरह एक उपयोगकर्ता इंटरफ़ेस पर विचार करें। मेरे पास 20 points leading space from it's superview के साथ एक छवि दृश्य है जिसका अर्थ है कि इसका पर्यवेक्षण के साथ क्षैतिज स्थान बाधा है। इसके अलावा मेरे पास उस छवि दृश्य, शीर्ष, चौड़ाई और उससे जुड़ी तीन और बाधाएं हैं। ऊंचाई।

मैं आपको दिखाऊंगा कि छवि में दिखाए गए अनुसार हम छवि को बाएं से दाएं कैसे एनिमेट कर सकते हैं।

बाधा के लिए आईबीओटलेट बनाएं, हमें एनिमेट करने की आवश्यकता है। यहां हम केवल क्षैतिज अंतरिक्ष बाधा ले रहे हैं, जो इस दृश्य को बाएं से दाएं स्थानांतरित करने के लिए पर्याप्त है।

@property (weak, nonatomic) IBOutlet UIImageView *imageView; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalSpaceConstraint; 

enter image description here

Go Away कार्रवाई के अंदर, हम इस बाधा के लगातार मूल्य अपडेट करना होगा।

- (IBAction)moveFrontAction:(id)sender { 
    self.horizontalSpaceConstraint.constant = 220; 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.imageView layoutIfNeeded]; 
    }]; 
} 

अब दृश्य सिर्फ कर कि एक एनीमेशन ब्लॉक के अंदर तो हम एक अच्छा एनीमेशन देखने के लिए सही है और इसके उत्पादन versa.In बाएं से सक्षम हो जाएगा सही end.I'm ले जाया जाना चाहिए, हम इस तरह के मूल्यों को कड़ी मेहनत नहीं करनी चाहिए। बस अवधारणा को स्पष्ट करने के लिए इसे यहां करें।

enter image description here

Come Back कार्रवाई के अंदर, हम फिर से निरंतर को रीसेट कर रहे हैं इसे वापस करने के लिए, मूल मूल्य है ताकि आप नारंगी छवि मूल स्थान पर वापस एनिमेट देख सकते हैं।

- (IBAction)moveBackAction:(id)sender { 
    self.horizontalSpaceConstraint.constant = 20; 

    [UIView animateWithDuration:0.5 animations:^{ 
     [self.imageView layoutIfNeeded]; 
    }]; 
} 
+0

धन्यवाद यह मेरी समस्या हल हो गया। – jdog

+0

अरे उपयोगकर्ता 1687717 एनिमेटेड शैली का उपयोग न करने वाले दृश्य के स्पर्श विधियों का उपयोग करके दृश्य को स्क्रॉल करना चाहता है .. –

+1

किसी बाधा के निरंतरता को बदलने से पहले, '[self.imageView layoutIfNeeded]' को कॉल करना बेहतर होगा। यहां इसका कोई असर नहीं है लेकिन असली परियोजनाओं पर चलने में अन्य एनिमेटिंग हो सकती है। इसलिए एनिमेट करने से पहले आपके इमेजव्यू को अपना अंतिम फ्रेम देखना चाहिए.- '(IBAction) moveBackAction: (id) प्रेषक { [self.imageView layoutIfNeeded]; self.horizontalSpaceConstraint.constant = 20; [UIView एनिमेट विथ अवधि: 0.5 एनिमेशन:^{ [self.imageView layoutIfNeeded]; }]; } ' –