2

我在两个 UITextFields 上做一些动画。当一个文本字段完成编辑时,我使用UIView.animateWithDuration动画左侧的第一个文本字段,另一个调用来UIView.animateWithDuration显示第二个文本字段进行编辑。

问题是,当我调用becomeFirstResponder()第二个文本字段时,它会还原第一个 ui 文本字段上的新 x/y 坐标。

这是怎么回事?

编辑

提供的代码

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
    })
}
4

2 回答 2

0

在 UIView 动画方法的完成块中,将 UITextfield 的框架设置为目标新位置。动画不会为您做到这一点,这是违反直觉的,但解释太长了。

于 2015-03-02T21:32:04.453 回答
0

如果您使用约束来创建原始位置,则可能会在弹出键盘时刷新布局,这会将您的文本框恢复到约束所说的位置。

如果是这种情况,您可能需要在 layoutSubviews 中设置文本字段最终帧。这样,您将继续覆盖默认布局。仅在它应该折叠时才这样做,以便它在应该折叠时弹回。

于 2015-03-02T21:47:19.717 回答