2016-10-04 44 views
0

我想要動畫一個UILabel,以垂直和水平居中爲中心,以便它從頂部結束40個點。動畫中心垂直約束從頂部固定

由於這樣的事實,這是在多種設備/屏幕尺寸,我不認爲我可以使用頂部約束爲隨後的項目不一定會在正確的地方開始,同樣也不會是一個'常數'的價值使用,將適用於所有設備高度

什麼是最好的方式去做到這一點?我最好有2個約束條件,1個用於垂直中心開始,然後1個用於動畫結尾的頂部位置,然後在動畫中切換這些約束?

到目前爲止,我只是有一個IBOutlet我centerY約束,我試圖重寫,像這樣:

labelYConstraint = NSLayoutConstraint.init(item: titleLabel, attribute:NSLayoutAttribute.centerY , relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.top, multiplier: 0, constant: 40) 

    UIView.animate(withDuration: 2.0) { 
     self.view.layoutIfNeeded() 
    } 

任何人都成功地實現類似的東西?

+0

什麼是崩潰說呢? – Connor

+0

對不起崩潰似乎乾淨後已經走了,但還是有沒有動畫剛剛從centervertically改變labelYConstraint上述 – TommyBs

+0

嘗試將其設置爲新值之前設置'labelYConstraint.active = FALSE',所以舊約束停用。 – Connor

回答

0

您需要首先關閉之前設定的約束:

labelYConstraint.active = false 
labelYConstraint = NSLayoutConstraint.init(item: titleLabel, attribute:NSLayoutAttribute.centerY , relatedBy: .equal, toItem: view, attribute: NSLayoutAttribute.top, multiplier: 0, constant: 40) 
view.addConstraint(labelYConstraint)