如何在swift中停止动画?

时间:2015-07-27 23:34:23

标签: ios swift animation uitextfield

当我开始在uitextfield中输入时,我想要一些动画发生,它不应该反转直到我完成输入。我正在使用此代码进行动画制作:

func textFieldDidBeginEditing(textField: UITextField) {
    println("begin")
    UIView.animateWithDuration(1.0, animations:{
        self.secondTextfield.frame = CGRectMake(self.secondTextfield.frame.origin.x + 500, self.secondTextfield.frame.origin.y, self.secondTextfield.frame.size.width, self.venueTextField.frame.size.height)
    })
}

我想要做的是:当我开始在第一个文本字段中输入时,我希望第二个文本字段隐藏在视图之外,当我完成输入时,我希望它能够重新设置动画。

我的问题是:当我开始输入动画时,它会回到原来的位置。它不会等我完成输入。

2 个答案:

答案 0 :(得分:0)

  1. 为什么不将alpha更改为0,改变其框架?
  2. 你需要确定巫文字正在编辑。
  3. 您需要处理textFieldDidEndEditing才能获得第二个textField。
  4. 示例:

    func textFieldDidBeginEditing(textField: UITextField) {
        if textField == firstTextField {
            UIView.animateWithDuration(1.0, animations:{
                self.secondTextfield.alpha = 0
            })
        }
    }
    
    func textFieldDidEndEditing(textField: UITextField) {
        if textField == firstTextField {
            UIView.animateWithDuration(1.0, animations:{
                self.secondTextfield.alpha = 1
            })
        }
    }
    

答案 1 :(得分:0)

虽然我不确切知道问题是什么,但我找到了解决问题的合理方法:

为动画定义textField x坐标的自动布局约束设置动画,而不是为动画设置动画。例如,下图包含两个textField。当我开始输入顶部的那个时,我想为底部动画制作动画:

enter image description here

垂直约束是我想要动画的centre x alignment。为实现此效果,我将@IBOutletNSLayoutConstraint

相关联

enter image description here

我让我的视图控制器采用UITextFieldDelegate并实现了三种方法:

extension ViewController: UITextFieldDelegate {
  func textFieldDidBeginEditing(textField: UITextField) {
    self.c.constant += 100 //c is my constraint
    UIView.animateWithDuration(1.0) {
      self.view.layoutIfNeeded()
    }
  }

  func textFieldDidEndEditing(textField: UITextField) {
    println("textFieldDidEndEditing")
    self.c.constant -= 100
    UIView.animateWithDuration(1.0) {
      self.view.layoutIfNeeded()
    }
  }

  func textFieldShouldReturn(textField: UITextField) -> Bool {
    a.resignFirstResponder()
    return true
  }
}

这种方法需要一些自动布局知道,但我能够达到你想要的效果。