2016-07-27 49 views
1

我想用我的視圖執行基於交互式手勢的動畫,需要將屏幕中心的視圖移動到屏幕的左上角。我似乎無法插入兩個不同x/y約束的位置(只改變常量)之間插入,所以作爲替代方案,我想也許我可以在故事板中佈置視圖,然後通過直接更改框架來製作動畫。有沒有一個好的方法來做到這一點,或者這是一個壞主意?我可以在故事板中使用自動佈局來放置我的視圖,然後禁用約束?

回答

1

你不需要刪除他們!只要停用它們就足夠了。

如果你看過文檔,你應該知道UIViewconstraints屬性返回它作爲[NSLayoutConstraint]的約束條件。你只需要遍歷這個數組並停用所有約束!

for constraint in someView.constraints { 
    constraint.active = false 
} 

或者使用forEach

someView.constraints.forEach { $0.active = false } 

停用的約束,而不是刪除它們,你可以再次激活它們很容易,當你需要它的優勢。

+0

這是forEach語句的工作原理嗎? $ 0是什麼意思? – GoldenJoe

+1

@GoldenJoe這是編寫'for in'循環的另一種方式。看到我在'for in'循環中聲明的變量'constraint'? 'forEach'閉包中的'$ 0'具有大致相同的含義。如果你覺得這對你來說太過於實用,那就堅持'for in'循環。 – Sweeper

+0

@GoldenJoe它適合你嗎?如果確實如此,請考慮接受答案。 – Sweeper

0

如果我是你,我會選擇動畫約束。即使由於某種原因無法更改約束常數,仍然可以刪除以前的約束並添加一個新的約束。 要做到這一點,您需要:

  1. 保持到要更改
  2. 從視圖
  3. 設置新的限制去掉,將其添加到視圖約束參考
  4. 保持這種新的約束
  5. 動畫的參考用:

    UIView.animateWithDuration(0.5){ self.view.layoutIfNeeded () }

+0

不幸的是,這不會產生交互式動畫。 – GoldenJoe

+0

爲什麼?你嘗試過嗎? – RomOne

+0

我不認爲你理解這個問題。我正在製作一個隨着用戶在屏幕上下移動而進行的動畫。這不是「按下按鈕並觀看動畫」類型的動畫。 – GoldenJoe

相關問題