当前位置: 首页 > 知识库问答 >
问题:

NSLayoutConstraint是动画的吗?

薄兴昌
2023-03-14

我正在尝试设置一些视图的动画,以便它们被风景中的巨大键盘挡住。如果我只是为帧设置动画,效果会很好,但其他人认为这会适得其反,我应该更新NSLayoutConstraints。然而,它们似乎不具有动画效果。有人让他们成功地工作了吗?

//heightFromTop is an NSLayoutConstraint referenced from IB
[UIView animateWithDuration:0.25 animations:^{
    self.heightFromTop.constant= 550.f;
}];

结果是瞬间跳到有问题的高度。

共有3个答案

魏翰
2023-03-14

我尝试了@Centurion的方法,但是不知何故,如果从故事板加载,我的视图会动画到错误的帧。如果我用updateConstraintsIfNeed替换第一个layoutIfNeed,问题就解决了,尽管我不知道为什么。如果有人能给出解释,那将不胜感激。

[self.view updateConstraintsIfNeeded];
[UIView animateWithDuration:1.0 animations:^{
    self.myConstraint.constant= 100;
    [self.view layoutIfNeeded];
}];
鞠通
2023-03-14

苹果公司建议的方法有点不同(参见“自动布局的动画更改”部分的例子)。首先,你需要在动画之前调用layoutIfNeed。然后在动画块中添加你的动画内容,然后在最后再次调用layoutIfNeed。对于像我这样正在过渡到自动布局的人来说,它更类似于我们以前对动画块中的帧所做的动画。我们只需要调用layoutIfNeed两次——在动画之前和动画之后:

[self.view layoutIfNeeded]; // Ensures that all pending layout operations have been completed

[UIView animateWithDuration:1.0f animations:^{

  // Make all constraint changes here
  self.heightFromTop.constant= 550.f;

  [self.view layoutIfNeeded]; // Forces the layout of the subtree animation block and then captures all of the frame changes

}];
柯乐童
2023-03-14

只需遵循以下确切模式:

self.heightFromTop.constant = 550.0f;
[myView setNeedsUpdateConstraints];

[UIView animateWithDuration:0.25f animations:^{
   [myView layoutIfNeeded];
}];

其中myViewself的视图。已将heightFromTop添加到。您的视图正在“跳跃”,因为您在动画块中所做的唯一一件事就是设置约束,这不会立即导致布局。在您的代码中,在设置heightFromTop之后,布局会在下一次运行循环中发生。常数,此时您已经超出动画块的范围。

在Swift 2中:

self.heightFromTop.constant = 550
myView.setNeedsUpdateConstraints()

UIView.animateWithDuration(0.25, animations: {
   myView.layoutIfNeeded()
})
 类似资料:
  • 我不知道如何在iOS7中设置NSLayoutConstraint动画持续时间。这是我的代码:

  • 问题内容: 我想制作一个UIImageView动画。我声明了NSLayoutConstraintin viewDidLoad并使用了以下代码: 为什么我的图像不动? 问题答案: 在您按下时viewDidLoad,约束引擎尚未 应用,并且视图的起始位置尚未建立。 因此,可以随时在中添加原始约束viewDidLoad,但是您 需要将推迟到animateWithDuration该过程的后面(例如 vie

  • NSLayoutConstraint-Equations 是一种 Swift 库,其作用是可编程地创建自动布局约束,类似数学方程式和不等式。 使用: view.addConstraint(Top(label) == 1 * Top(button) + 20)view.addConstraints(Top(label) == Top(button) |+ CenterX(label) == Cent

  • 我试图重现这样一个场景,红色和蓝色矩形可以在不同的屏幕尺寸下占据相同的宽度和高度(以及它们之间的相同间隙)。 我正在使用NSLayoutConstraint(我知道现在首选锚,只是试图探索基础)。我在swift游乐场尝试了以下代码: 但它显示的只是一个白色屏幕,其宽度与iPhone不匹配。我在这里做错了什么?为什么我看不到红蓝屏?

  • 本文向大家介绍什么是逐帧动画?相关面试题,主要包含被问及什么是逐帧动画?时的应答技巧和注意事项,需要的朋友参考一下 实现逐帧动画需要两个条件: (1)相关联的不同图像,即动画帧;(2)连续播放。

  • 问题内容: 给定以下CSS3动画。… “ Hello World”文本动画会按预期下降100px。但是,在动画结束时,它会跳回到其原始位置。 显然,这在CSSland中是有意义的。动画已应用且不再作用于元素,因此原始样式生效。不过,这对我来说似乎有些奇怪- 当然,如果有人将某个元素动画化到位,那么人们会期望该位置继续存在吗? 有什么方法可以使结束位置“粘滞”,而不必借助Javascript在动画结