2015-03-25 7 views
14

ऑटो लेआउट से पहले ऑटो लेआउट का उपयोग करते समय UIView ऊंचाई को एनिमेट करें, मैं animateWithDuration पर फ्रेम सेट करके एक प्रोजेक्ट में पृष्ठभूमि की ऊंचाई एनिमेट कर रहा हूं।स्विफ्ट

func setUpBackground() { 
    self.backgroundView.frame = CGRect(x: 0, y: 0, width: 320, height: 10) 
    self.backgroundView.backgroundColor = UIColorFromRGB(0x2d2d2d).CGColor 
} 

func AnimateBackgroundHeight() { 
    UIView.animateWithDuration(0.5, animations: { 
     self.backgroundView.frame = CGRect(x: 0, y: 0, width: 320, height: 600)  
    }) 
} 

मैं ऑटो लेआउट करने के लिए अपने प्रोजेक्ट परिवर्तित करने के बाद, मैंने देखा है कि एनीमेशन होता है, लेकिन पृष्ठभूमि ऊंचाई वापस मूल आकार/शैली (इंटरफ़ेस बिल्डर सेटिंग) के बाद करने के लिए तस्वीरें। मैंने पढ़ा है कि जब ऑटो-लेआउट चालू होता है, तो बाधा CGRect के साथ UIView आयामों को सेट करने पर ओवरराइट कर देगी।

इसलिए मैं सोच रहा हूं कि ऑटो लेआउट चालू के साथ समान ऊंचाई परिवर्तन एनीमेशन प्रभाव को प्राप्त करने के बारे में कैसे जाना है।

उत्तर

35

अपनी पृष्ठभूमि दें एक ऊंचाई बाधा देखें, और इसे आईबीओटलेट बनाएं। कोड में, बाधा के स्थिर मूल्य को संशोधित करें।

func AnimateBackgroundHeight() { 
    UIView.animateWithDuration(0.5, animations: { 
     self.heightCon.constant = 600 // heightCon is the IBOutlet to the constraint 
     self.view.layoutIfNeeded()  
    }) 
} 
+0

आह मैं देखता हूं! यह बहुत अच्छा काम करता है। बहुत बहुत धन्यवाद। – Poyi

+0

omg .. layoutIfNeeded() चाल है ... मैं इसे याद कर रहा था –

5
इसके अलावा जो इस पोस्ट यह पता लगाने की क्यों एक संक्रमण के लिए एक दृश्य के आकार बदलने ब्लॉक वाले या अशुद्ध हो जाएगा तुम सिर्फ आरोप में दृश्य खोजने के लिए और UIView.animateWithDuration ब्लॉक के अंदर self.view.layoutIfNeeded() कॉल करने की आवश्यकता की कोशिश कर लगता है कि आप में से उन लोगों के लिए

। मैं दीवारों के खिलाफ अपने सिर को टक्कर से अलग कर रहा था और बाधाओं के साथ अलग-अलग चीजों की कोशिश कर रहा था जब तक कि self.view.layoutIfNeeded() तब तक संक्रमण को चिकनी बनाने में संभाल लेगा जब तक आप इसे सही स्थान पर रख रहे हों।

+1

एनिमेटिंग के दौरान मेरा लेआउट तोड़ने का प्रयास करने के 7 घंटों तक खर्च किया। आपको पोस्ट देखने के बाद मुझे एहसास हुआ कि मैं लेआउट बुला रहा था अगर पर्यवेक्षण पर एक सबव्यू नहीं किया गया है। धन्यवाद!! – Starlord