2015-03-02 25 views
2

我正在兩個UITextFields上做一些動畫。當一個文本字段通過編輯完成後,我使用UIView.animateWithDuration將第一個文本字段設置爲左側動畫,並使用UIView.animateWithDuration的另一個電話顯示第二個文本字段進行編輯。becomeFirstResponder重置其他視圖的x/y位置

問題是,當我在第二個文本字段上調用becomeFirstResponder()時,它會在第一個ui文本字段上恢復新的x/y座標。

怎麼回事?

EDIT

代碼提供

func animateMe() { 
    UIView.animateWithDuration(0.5, delay: 0, options: .CurveEaseOut, animations: { 
     self.onText.frame.offset(dx: self.onText.frame.size.width/-4 * 3 - 10, dy: 0) 
     }, completion: { finished in 
      println("one shown!") 
      self.oneText.frame.offset(dx: self.onText.frame.size.width/-4 * 3 - 10, dy: 0) 
      self.twoText.becomeFirstResponder() //undoes the whole animation 
    }) 
} 

回答

0

在了UIView動畫方法完成塊,您的UITextField的幀設置爲目標的新位置。 動畫不會爲你做,這是違反直覺的,但解釋太長。

+0

不知道如果即時通訊做你在說什麼..你會看到我的編輯? – styler1972 2015-03-02 22:16:58

0

如果您使用約束來創建原始位置,則可能會在彈出鍵盤時刷新佈局,這會將您的文本框恢復到約束條件應該位於的位置。

如果是這種情況,您可能需要在layoutSubviews中設置文本字段的最終框架。這樣你將會覆蓋默認的佈局。只有在應該摺疊時纔會執行此操作,以便在應該時彈出。

+0

我已經刪除了文本字段中的所有約束,並且實際上禁用了鍵盤(模擬器),問題仍然存在 – styler1972 2015-03-02 22:03:57

+0

如果您在任何地方都有任何約束,Xcode將在幕後添加自動約束。我會添加layoutSubviews,只是叫超級,但放在一個斷點,所以你可以檢測它是否被調用。 becomeFirstResponder詢問文本字段的輸入視圖和附件視圖,然後很可能會做佈局,無論您是否在模擬器中顯示鍵盤。 – 2015-03-02 22:26:13

相關問題