2015-07-20 65 views
0

當用戶從段輸入中選擇一個選項時,我必須隱藏一個字段。 隱藏的字段是第一個,所以我必須爲其他字段設置動畫以覆蓋隱藏字段創建的空間。swift中的動畫在執行某些操作後得到恢復

我正在使用下面的代碼,動畫在隱藏手機輸入後按預期工作。但是當我從同一視圖(電子郵件或任何按鈕或其他任何東西)中選擇任何其他字段時,emailInput再次顯示在與之前相同的位置。動畫(輸入位置)的效果丟失。

@IBAction func hasPhoneChanged(sender: UISegmentedControl) {//is called when user selects that "he have phone or not" 
     if sender.selectedSegmentIndex == 0 {//Yes 
      self.phoneInput.hidden = false 
      ... 
     }else{        //No 
      self.phoneInput.hidden = true 
      //move the next input up, to cover space  
      UIView.animateWithDuration(1, animations: {() -> Void in 
       self.emailInput.frame.origin.y = self.emailInput.frame.origin.y - 38; 
      }) 
     } 
    } 

我做錯了什麼?任何線索請。

回答

1

如果使用自動佈局,請改爲爲自動佈局約束設置動畫。 例如:

UIView.animateWithDuration(1, animations: {() -> Void in 
self.emailTopVSpaceConstraint.constant = self.emailTopVSpaceConstraint.constant - 38; 
self.view.layoutIfNeeded() 
}) 
+0

你說得對,我正在使用自動佈局。這就是問題所在。現在它保持動畫位置。但現在它不動畫,它只是直接出現在我想要它出現的位置。這就是我現在使用的「UIView.animateWithDuration(1,動畫:{() - >虛空 self.emailTopVSpaceConstraint.constant = self.emailTopVSpaceConstraint.constant - 38 })「 – Patriks

+0

在您的動畫塊中調用layoutIfNeeded以使目標位置的計算髮生。編輯我的答案。 – Stefan

+0

正確答案!對於知識,什麼是更有效的方法1)動畫的屬性(高度/寬度)和'完成:'設置約束或2)通過約束動畫,如上所示。 – Patriks

相關問題