UIView - 持续时间的动画似乎忽略了持续时间

时间:2016-09-13 11:57:51

标签: ios swift animation uiview uiviewanimation

我遇到了问题:我有一个非常简单的自定义yum install php-soap ,其中包含一个UIView和一个UITextField

UILabel位于UILabel,我希望当用户开始编辑UITextField时,UILabel最多可达40px。

我使用约束来设置文本字段的框架和标签的框架。

因此,我只需使用UITextField协议在自定义视图中设置委托,并实现委托方法:UITextFieldDelegate,如下所示:

我只是在委托方法中设置标签的约束(中心Y)。

textFieldDidBeginEditing

func textFieldDidBeginEditing(textField: UITextField) { self.centerVerticallyLabelConstraint.constant = -40 UIView.animateWithDuration(0.5) { self.textFieldLabel.layoutIfNeeded() } } 正确上升,但会立即上升。它会忽略动画中UILabel的持续时间。我不知道为什么:

Show problem image

我没有同时制作其他动画,我只有这个动画。 我没有停用0.5的动画 代理人设置为我的UIView.

有什么想法吗?

4 个答案:

答案 0 :(得分:9)

尝试在视图上调用layoutIfNeeded而不是textview。

UIView.animateWithDuration(0.5) {
    self.view.layoutIfNeeded()
}

希望这有帮助。

答案 1 :(得分:0)

尝试使用以下代码执行:

func textFieldDidBeginEditing(textField: UITextField) {
    UIView.animateWithDuration(0.5) {
        self.textFieldLabel.frame.origin.y -= 40
    }
}

答案 2 :(得分:0)

需要致电self.view.layoutIfNeeded()而不是self.textFieldLabel.layoutIfNeeded() 感谢

答案 3 :(得分:0)

对我来说,问题似乎是因为我已经在主线程上,并且在GCD main.async调用中调用了动画块。

我有

df_raw

该视图可对移动进行动画处理,但不会在2.0秒内逐渐进行动画处理。卸下外部df_subset可解决此问题。