0

当我按下按钮时,我有一个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)


}
4

2 回答 2

0

自动布局不会让您更改视图的框架。相反,您假设更改约束并调用setNeedsUpdateConstraints(). 如果您确实需要执行临时更改视图位置的动画,您可以使用CGAffineTransformand 特别地CGAffineTransformMakeTranslate(),给出txty 表示“您希望移动视图的点数”。由于您还在代码中使用变换来动画比例,因此您可以使用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)
}

在 Apple Docs 中了解有关 CGAffineTransform 的更多信息

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

于 2015-01-05T05:30:12.267 回答
0

如果您使用的是 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)
}
于 2015-01-05T01:36:52.087 回答