2015-03-25 20 views
14

ile otomatik düzeni kullanırken UIView yüksekliğini Otomatik düzeninden önce, çerçeveyi animateWithDuration üzerinden ayarlayarak bir projenin arka plan yüksekliğini canlandırıyorum. Ben oto düzeni projemi dönüştürülmüş sonraAnimate

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)  
    }) 
} 

, ben arka plan yükseklik geri sonra orijinal boyut/stil (arayüz oluşturucu ayarı) bitişmeden ama animasyon oluşur fark ettim. Otomatik düzen açıldığında, UIView boyutlarını CGRect ile sınırlamanın üzerine yazacağım.

Bu nedenle Otomatik Düzenleme AÇIK ile aynı yükseklik değişimi animasyon efektini gerçekleştirmeye nasıl devam edeceğinizi merak ediyorum.

cevap

35

Arka planınızı verinBir yükseklik kısıtlaması görüntüleyin ve bir IBOutlet yapın. Kodda, kısıtlamanın sabit değerini değiştirin. Bir görünümün boyutunu değiştirerek bir geçiş sadece sorumlu görünümü bulmak ve UIView.animateWithDuration bloğun içine self.view.layoutIfNeeded() çağırmanız gerekir bloklu veya kirli olacak anlamaya çalışırken bu yayını bulmak olanlarınız için de

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

Ah görüyorum! Bu harika çalışıyor. Çok teşekkürler. – Poyi

+0

omg .. layoutIfNeeded() hile yaptı ... ben eksikti –

5

. Kafamı, farklı şeyleri denemelerle uğraşarak duvara çarpıyordum ve self.view.layoutIfNeeded(), doğru yere yerleştirdiğiniz sürece geçişi pürüzsüz hale getirmeye kadar çerçeveler yapıyordum.

+1

7 saat benim düzeni neden benim düzen kırılma anlamaya çalıştık. Mesajları gördükten sonra, süper görüntüyü değil, bir alt görünümde layoutIfNeeded'i aradığımı fark ettim. Teşekkürler!! – Starlord