动画 UITextField
Posted
技术标签:
【中文标题】动画 UITextField【英文标题】:Animate UITextField 【发布时间】:2015-01-04 17:47:00 【问题描述】:我需要这样做,以便当我单击按钮时,UITextField
从view
外部向左转换到view
。但是,当我执行以下代码时,UITextField
从视图控制器的中间开始,然后当单击按钮时,它从view
外部向左转换到view
。我怎样才能做到这一点,以便在最初加载视图时,使用 swift 在单击按钮之前看不到它。
@IBAction func joinCircleButton(sender: AnyObject)
let button = sender as UIButton
joinTextField.frame.origin.x=500
joinTextField.frame.origin.y=100
if (button.frame.origin.x - 75>0)
UIView.animateWithDuration(0.5, animations:
button.frame = CGRectMake(button.frame.origin.x - 125, button.frame.origin.y,button.frame.size.width, button.frame.size.height)
button.transform = CGAffineTransformMakeScale(0.5, 0.5);
self.joinTextField.frame=CGRectMake(self.joinTextField.frame.origin.x - 325, self.joinTextField.frame.origin.y,self.joinTextField.frame.size.width, self.joinTextField.frame.size.height)
)
【问题讨论】:
【参考方案1】:您需要使用以下函数将 UITextField 或您希望隐藏的任何对象放在视图之外:
func viewDidLayoutSubviews()
在加载屏幕之前调用此函数。它准备好子视图,但尚未在屏幕上显示它们。所以这是一个隐藏 UITextField 的机会,如下所示:
func viewDidLayoutSubviews()
// Here is just an EXAMPLE of what I'd do with my text field, you can change this however you wish
// The point is that I am putting it away so no one can see it at first, and then later it will show
joinTextField.center = CGPointMake(joinTextField.frame.origin.x-500, joinTextField.frame.origin.y)
现在应该在视图加载时隐藏文本字段,然后可以在以后设置动画。我希望这会有所帮助。
【讨论】:
它有效,谢谢。但是由于某种原因,每当我单击文本字段或任何其他对象时,所有动画对象都会回到动画之前的原始位置。我怎样才能阻止这种行为。 您能否再描述一下。告诉我从头到尾的行为。 1) 我单击按钮 2) 按钮向左移动,同时变小 3) 单击按钮时文本字段进入视图 4) 一切都已完成动画 5) 我单击textfield 6)按钮回到原来的位置,但仍然是小尺寸,并且文本字段从视图中消失 我以前的动画也遇到过这种情况。我无法解释这种现象,我相信它与“viewdidlayoutsubviews”有关。每当我制作动画时,我都不使用按钮动作来执行它们,但尽管如此。您可以做的是使用布尔值并首先将其设置为 false。在“viewdidlayoutsubviews”中放置“if else”语句,如果布尔值为 false,则执行动画,否则不执行任何操作。现在在您的按钮操作中将布尔值设置为 True,也许这可以防止这些动画问题。否则,我们可以私聊,我可以好好看看。 我相信“viewdidlayoutsubviews”会再次被调用,或者其他什么。我不确定,但我遇到过事情变小或者动画一遍又一遍地运行的情况。以上是关于动画 UITextField的主要内容,如果未能解决你的问题,请参考以下文章