2015-03-25 133 views
14

在自動佈局之前,我通過將框架設置爲animateWithDuration以上來動畫背景的高度。使用自動佈局快速動畫UIView高度

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

我將我的項目自動佈局後,我注意到,出現動畫,但後臺的高度彈回後,原來的大小/風格(Interface Builder中設置)。我讀到,自動佈局打開時,約束將覆蓋UIView尺寸CGRect

因此,我想知道如何去實現與自動佈局ON相同的高度變化動畫效果。

回答

35

給你的backgroundView一個高度約束,併爲它製作一個IBOutlet。在代碼中,修改約束的常量值。

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

啊我明白了!這很好。非常感謝。 – Poyi 2015-03-25 06:06:04

+0

omg .. layoutIfNeeded()做了詭計...我錯過了它 – 2017-05-24 04:22:25

5

也爲那些你們誰發現這個帖子,試圖找出爲什麼一個過渡改變一個視圖的大小將塊狀或不潔淨的,你只需要找到負責的觀點,並呼籲self.view.layoutIfNeeded()UIView.animateWithDuration塊內。我只是將自己的頭撞在牆上,試圖用各種限制來製造不同的東西,並製作相框,直到認識到self.view.layoutIfNeeded()只要您將它放置在正確的位置就可以平滑過渡。

+1

花了7個小時試圖弄清楚爲什麼我的佈局在動畫製作時突破。看到你的帖子後,我意識到我正在調用layoutIfNeeded而不是superview。謝謝!! – Starlord 2017-01-07 19:57:05

相關問題