【问题标题】:How to animate on uitextfields begins editing in swift如何在 uitextfields 上制作动画开始快速编辑
【发布时间】:2015-07-28 07:38:47
【问题描述】:

我想在 FirstTextfield 变为FirstResponder 时在 secondTextField 上执行一些动画

在第一响应者辞职后,动画应在第二个文本字段中反转。我怎样才能快速做到这一点?

注意:这与将文本字段移动到键盘顶部不同。

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        if(textField == firstTextField) {
    UIView.animateWithDuration(1.0, animations: {
        self.secTextField.frame = CGRectMake(self.secTextField.frame.origin.x + 500, self.secTextField.frame.origin.y, self.secTextField.frame.size.width, self.secTextField.frame.size.height) })
    }
    return true
}

我想要做的是,当用户输入 firstTextField 时,secTextField 应该消失并隐藏在视线之外。 实际发生的情况是 secTextField 从看不见的位置回到原来的位置

【问题讨论】:

    标签: ios swift uitextfield uianimation


    【解决方案1】:

    您可以使用 UITextField 的委托方法来实现这一点。如果您详细解释您的动画,我也可以为您提供帮助。

    func textFieldDidBeginEditing(textField: UITextField) {
    
        if textField == self.firstTextField {
            UIView.animateWithDuration(2, delay: 0, options: nil, animations: { () -> Void in
                self.secondTextField.frame = CGRectOffset(self.secondTextField.frame, 500, 0)
                }, completion: nil)
        }
    }
    
    func textFieldShouldReturn(textField: UITextField) -> Bool {
    
        if textField == self.firstTextField {
            UIView.animateWithDuration(2, delay: 0, options: nil, animations: { () -> Void in
                self.secondTextField.frame = CGRectOffset(self.secondTextField.frame, -500, 0)
                }, completion: nil)
        }
        textField.resignFirstResponder()
        return true
    }
    

    不要忘记在 UITextField 对象上设置委托(在您的 viewDidLoad 上)

    self.firstTextField.delegate = self
    self.secondTextField.delegate = self
    

    您可以从这里下载示例:https://github.com/alextarrago/text-field-test

    【讨论】:

    • func textFieldShouldBeginEditing(textField: UITextField) -> Bool { if(textField == firstTextField) { UIView.animateWithDuration(1.0, 动画: { self.secTextField.frame = CGRectMake(self.secTextField.frame. origin.x + 500, self.secTextField.frame.origin.y, self.secTextField.frame.size.width, self.secTextField.frame.size.height)}) } return true } 我想将 secTextField 移出我的观点,但实际发生的是它从看不见的地方回到原来的位置
    • 如果您想添加更多代码,请编辑您之前的问题,cmets 是字符限制的!
    • 你能理解我的问题吗?
    • 我已经用工作代码编辑了我的答案(不使用自动布局)。
    • 不走运 :( textFieldShouldReturn 运行良好。但是 textFieldDidBeginEditing 会在 secTextfield 从看不见的位置移到原始位置时进行动画处理
    【解决方案2】:

    就我而言,它对我有用。只需使用self.view.layoutIfNeeded()

    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        if(textField == firstTextField) {
            UIView.animateWithDuration(1.0, animations: {
                self.secTextField.frame = CGRectMake(self.secTextField.frame.origin.x + 500, self.secTextField.frame.origin.y, self.secTextField.frame.size.width, self.secTextField.frame.size.height)
                self.view.layoutIfNeeded()
            })
        }
        return true
    }
    

    【讨论】:

      【解决方案3】:

      我终于找到了答案。 我做了以下步骤。

      1. 清理我的项目,
      2. 启用然后再次禁用自动布局。
      3. 在 xib 和 swift 文件中为这些文本字段设置委托。
      4. 然后是编码:

             `self.secTextField.frame.origin.x = self.secTextField.frame.origin.x + 500`
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        相关资源
        最近更新 更多