2015-10-18 69 views
2

我正在動畫自定義UIView以展開,如下面的gif(紅色視圖)所示。 單擊打開/關閉按鈕時,我想讓左側圖標垂直位於其俯視圖的中央。如下圖所示,只要我點擊按鈕,圖標就會彈出到動畫完成後的位置。 這個按鈕也是一樣,但是它不像它被暫時隱藏起來一樣顯而易見。動畫UIView的子視圖不會在動畫期間保持其約束

我也希望中間的UILabel能夠動畫它的大小,而不是一點擊'關閉'就彈出到最小高度。

在故事板中我已經設置了圖標和按鈕來將中心與超級視圖對齊,這對我來說似乎是實現我想要的正確方法。我會假設,當我爲超級視圖設置動畫時,子視圖在動畫期間保持居中,但是他們立即移動到將會正確的點,但動畫完成後。

gif

我的動畫代碼:

UIView.animateWithDuration(0.4, animations: {() -> Void in 

    var rect = self.frame; //The current frame, to change 
    let oldHeight = self.frame.size.height as CGFloat 

    let newSize = self.sizeForBanner() //Get the CGSize for the big banner. 

    if(self.isBig) //Animate to big size 
    { 
     //Put the new height and origin for the large version of the view 
     rect.size.height = newSize.height; 
     rect.origin.y -= (rect.size.height - oldHeight) 

    }else{ //Animate to small size 

     //Put the new height and origin for the small version of the view 

     rect.size.height = self.minimalHeight; 
     rect.origin.y += oldHeight-rect.size.height 
    } 

     //Set the new variables 
     self.frame = rect; 

    }) { (Bool) -> Void in 
     //Completion 
} 

如何/我該怎麼改變,使圖標和按鈕時,上海華動畫留中心..

+0

你解決它?我面臨着同樣的問題... –

+0

@AviTsadok是的,我認爲是這樣!我現在沒有這裏的代碼,但我可以稍後再查看,並將其寫爲答案。我認爲這是啓用'view.clipsToBounds'(或稱之爲)和其他一些變量。並且一定要有你的約束 – Sti

+0

@AviTsadok其實,我沒有這個代碼了。我們最終使用了稍微不同的設計,但並不是因爲這個問題。我相當肯定,我設法通過改變約束來改變這個工作,並改變了一些值,比如'clipsToBounds'等等。我記得當我意識到我必須在* superview *中將'clipsToBounds'設置爲'true'而不是實際視圖(或者其他方式,或者某種東西)時,會出現一個'aha'時刻。重要的是哪個物體具有這些特性,這與我所想的相反。祝你好運,並對不起:) – Sti

回答

2

您需要已啓用Clip Subviews。這是UIViews默認禁用的值。

如果您是透過Interface Builder的觀點去Attributes Inspector並檢查Clip Subviews複選框:

enter image description here

如果您創建通過代碼視圖,然後使用:

view.clipsToBounds = true