我正在两个UITextField上做一些动画。当一个文本字段完成编辑时,我使用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
})
}
答案 0 :(得分:0)
在UIView动画方法的完成块中,将UITextfield的框架设置为目标新位置。
,动画不会对你这样做,这是违反直觉的,但解释太长了。答案 1 :(得分:0)
如果您使用约束来创建原始位置,则弹出键盘时可能会刷新布局,这会将文本框恢复到约束所说的位置。
如果是这种情况,您可能需要在layoutSubviews中设置文本字段最终帧。这样你就可以继续覆盖默认布局。只有当它应该被折叠时才这样做,所以当它应该被弹回时。