2015-06-04 81 views
0

我想要一個動畫來將UIImageView移動到由一組新約束定義的新位置,但出於某種原因,我無法使其工作。我試圖做:使用Swift更新動畫中的約束條件

@IBOutlet weak var oldBottom: NSLayoutConstraint! 

... 

func animateMovement() { 
    // Here I'm defining a new constraint 
    var newBottom = NSLayoutConstraint(
     item: self.logo, 
     attribute: NSLayoutAttribute.Bottom, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: self.usernameField, 
     attribute: NSLayoutAttribute.Bottom, 
     multiplier: 1, 
     constant: 15) 

    self.view.layoutIfNeeded() 

    UIView.animateWithDuration(1.0, animations: { 
     // Here I'm setting the already existing constraint (defined in storyboard) to the new constraint 
     self.oldBottom = newBottom 
     self.view.layoutIfNeeded() 

     }, completion: {}) 
} 

任何想法將不勝感激!

+0

輸入別叫layoutIfNeeded動畫塊 – mustafa

回答

0

所以我找到了錯誤的,這是一個很簡單的一個。我沒有調用self.view.setTranslatesAutoresizingMaskIntoConstraints(false),因爲我認爲這已經由故事板處理過了(因爲我在其中使用了自動佈局)。我簡單地補充說,在更新約束之前。 感謝所有:-)

1

您需要更新約束和動畫layoutIfNeeded,試試這個:

func animateMovement() { 
    var newBottom = NSLayoutConstraint(
     item: self.logo, 
     attribute: NSLayoutAttribute.Bottom, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: self.usernameField, 
     attribute: NSLayoutAttribute.Bottom, 
     multiplier: 1, 
     constant: 15) 
    self.view.layoutIfNeeded() 
    self.oldBottom = newBottom 
    UIView.animateWithDuration(1.0, animations: { 
     self.view.layoutIfNeeded() 
    }, completion: {}) 
+0

這樣做,我試過之外,遺憾的是它不工作: -/ – NikMos

+0

是不移動的動畫約束? – Icaro

+0

不,它不是,但我發現我的錯誤(請參閱我的問題更新):-) – NikMos