【问题标题】:UITextField DisapearingUITextField消失
【发布时间】:2015-01-05 01:02:28
【问题描述】:

我有一个UITextField,当我按下按钮时,它会在视图控制器上进行动画处理(从右侧移入视图)。但是,当我按下UITextField 或任何其他视图时,UITextField 就会消失。如何阻止 UITextField 消失。我正在使用以下代码:

@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)

    })
    }
}
override func viewDidLayoutSubviews(){
    joinTextField.center = CGPointMake(joinTextField.frame.origin.x-500, joinTextField.frame.origin.y)


}

【问题讨论】:

  • 你在使用自动布局吗?如果是这样,您不应该设置任何框架来移动按钮。当视图需要重绘自身时(例如当您开始编辑文本字段时),按钮将移回其约束定义的位置。
  • @rdelmar 我删除了按钮和文本字段上的自动布局,但仍将其用于视图中的其他内容?有问题吗?
  • 如果所有视图都在同一个情节提要中制作,则不能这样做——对于整个情节提要(或整个 xib 文件),它要么打开要么关闭。如果您不自己添加约束,系统会为您添加。
  • @rdelmar 我已经从情节提要中的 ViewController 中删除了所有约束,但情节提要中的其他 viewControllers 正在使用自动布局
  • 正如我所说,你不能那样做。系统将为您添加约束。单击您的一个视图,然后查看尺寸检查器——它将显示一条消息,说明系统将添加哪些约束。

标签: ios animation swift uibutton animatewithduration


【解决方案1】:

如果您使用的是 iPhone 模拟器,请尝试使用 50 而不是 500,因为屏幕宽度很小,因此您的文本字段会显示在屏幕外

joinTextField.frame.origin.x=**50**
joinTextField.frame.origin.y=100

override func viewDidLayoutSubviews(){
    joinTextField.center = CGPointMake(joinTextField.frame.origin.x-**50**, joinTextField.frame.origin.y)
}

【讨论】:

  • 我更改了joinTextField.frame.origin.x-**50** 部分。上面的部分应该怎么处理?
  • 为什么textField还在移动。
  • 如果您愿意,我可以通过 Skype 为您提供帮助。查看我的个人资料。
  • 开启:godostartupnow
  • 我已向您发送了addContact 请求。检查您的 Skype 帐户。
【解决方案2】:

自动布局不会让您更改视图的框架。相反,您应该更改约束并调用setNeedsUpdateConstraints()。 如果您确实需要执行临时更改视图位置的动画,您可以使用CGAffineTransform,特别是CGAffineTransformMakeTranslate(),给出txty,表示“您希望移动视图的点数” . 由于您还在代码中使用 transform 来设置动画比例,因此您可以使用 CGAffineTransformConcat 将比例和变换命令“合并”为您可以设置到视图的命令。

你的动画方法应该是这样的:

UIView.animateWithDuration(0.5) {
    let trans = CGAffineTransformMakeTranslation(-125, 0)
    let scale = CGAffineTransformMakeScale(0.5, 0.5)
    button.transform = CGAffineTransformConcat(trans, scale)
    self.joinTextField.transform = CGAffineTransformMakeTranslation(-325, 0)
}

Learn more about CGAffineTransform in Apple Docs

关于代码的其余部分 - 您仍然可以在 if 中检查它的框架,但您必须将更改框架的部分更改为使用 transform translate

【讨论】:

  • 那么我需要使用哪种方法来防止 textField 消失。谢谢,我是IOS新手。
  • 这就是我所拥有的:@IBAction func joinCircleButton(sender: AnyObject) { let button = sender as UIButton UIView.animateWithDuration(0.5) { let trans = CGAffineTransformMakeTranslation(-125, 0) let scale = CGAffineTransformMakeScale(0.5, 0.5) button.transform = CGAffineTransformConcat(trans, scale) self.joinTextField.transform = CGAffineTransformMakeTranslation(-25, -50) } }
  • 但是textField在按下时仍然移动,但是按钮保持不动。
猜你喜欢
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
相关资源
最近更新 更多