【问题标题】:UIView - Animate with duration seems to ignore durationUIView - 持续时间动画似乎忽略持续时间
【发布时间】:2016-09-13 11:57:51
【问题描述】:

我遇到了一个问题:我有一个非常简单的自定义 UIView,它将一个 UITextField 和一个 UILabel 分组。

UILabelUITextField 上,我希望UILabel 在用户开始编辑UITextField 时达到40px。

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

所以我只是在我的自定义视图中使用UITextFieldDelegate 协议设置委托,并实现委托方法:textFieldDidBeginEditing,如下所示:

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

func textFieldDidBeginEditing(textField: UITextField) {
    self.centerVerticallyLabelConstraint.constant = -40
    UIView.animateWithDuration(0.5) {
        self.textFieldLabel.layoutIfNeeded()
    }
}

发生的情况是UILabel 正确上升,但它立即上升。它忽略了我动画中0.5 的持续时间。我不知道为什么:

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

有什么想法吗?

【问题讨论】:

    标签: ios swift animation uiview uiviewanimation


    【解决方案1】:

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

    UIView.animate(withDuration: 0.5) {
        self.view.layoutIfNeeded()
    }
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢...我很生气以前没有看到这个!
    • 我已经为此苦苦挣扎了一天。在我的情况下,我正在为视图的高度约束设置动画,并且从视图本身对其进行动画处理。我根本不认为我必须在超级视图上调用 -layoutIfNeeded。谢谢。
    【解决方案2】:

    需要拨打self.view.layoutIfNeeded()而不是self.textFieldLabel.layoutIfNeeded() 谢谢

    【讨论】:

      【解决方案3】:

      试试下面的代码来执行:

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

      【讨论】:

      • 这将打破自动布局约束,这可能是不希望的。动画约束是一件有效的事情。
      【解决方案4】:

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

      我有

      DispatchQueue.main.async { 
      
      <# update the constraint s#>
      
      self.animatedViewsParent.setNeedsLayout() 
      animatedView.setNeedsLayout()
      
      UIView.animate(withDuration: 2.0) {
          self.animatedViewsParent.layoutIfNeeded()
        }
      }
      

      视图动画移动但不会逐渐动画超过 2.0 秒。删除外部DispatchQueue.main.async {} 解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多