当前位置: 首页 > 面试题库 >

如何在Swift中为NSLayoutConstraint设置动画?

龙学
2023-03-14
问题内容

我想制作一个UIImageView动画。我声明了NSLayoutConstraintin
viewDidLoad并使用了以下代码:

UIView.animate(withDuration: 1) {
    myConstraint.constant = 100
    self.view.layoutIfNeeded()
}

为什么我的图像不动?


问题答案:

在您按下时viewDidLoad,约束引擎尚未
应用,并且视图的起始位置尚未建立。
因此,可以随时在中添加原始约束viewDidLoad,但是您
需要将推迟到animateWithDuration该过程的后面(例如
viewDidAppear)。

例如,假设您在InterfaceBuilder(IB)中添加了一些约束。您可以通过以下方式添加@IBOutlet对它的control引用:从InterfaceBuilder 左面板的文档大纲中的约束向下拖动到助手编辑器

现在,您已经有了对该约束的引用,现在可以以编程方式更改该constant约束的值(但是,如果要在显示 视图时看到此动画,请再次在viewDidAppear而不是中viewDidLoad进行此操作):

@IBOutlet weak var topConstraint: NSLayoutConstraint!

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    topConstraint.constant = 100
    UIView.animate(withDuration: 2) {
        self.view.layoutIfNeeded()
    }
}

对约束的引用,然后viewDidAppear更新constant,然后对进行动画处理即可layoutIfNeeded()。



 类似资料:
  • 我想在不同的情况下芳香地改变一些约束。 声明来自情节提要的约束: 这是我的代码,我想在其中更改约束: 但是约束仍然没有改变。 这是我的手机ForRowAt func: 提前感谢您的帮助!

  • 我想在swift中设置一个现有UIButton的动画,目的是让用户在点击视图控制器时注意这个按钮。动画应该从视图控制器的顶部开始,并转到按钮的初始位置。 我做了以下场景,但它不起作用: 有什么建议吗? 非常感谢。

  • 当我开始在uitextfield中输入时,我希望发生一些动画,在我完成输入之前,它不应该反转回来。我正在使用此代码设置动画: 我想做的是:当我开始在第一个文本字段中键入时,我希望第二个文本字段从视图中隐藏,当我完成键入时,我希望它重新设置动画。 我的问题是:当我开始键入动画时,它会返回到原始位置。它不会等我完成打字。

  • 在我的人造示例中,我有以下单个视图: 如您所见,它由几个简单的约束组成: 将水平和垂直中心对齐, 高度(设置为常数) 前导空格和尾随空格(设置为常量) 我想要实现的是让这个红色/粉红色的视图从顶部“进来”。传统上,在一个没有约束的世界中,我只需修改,但我不确定在约束世界中如何进行类似操作。 为了重申我的问题,我如何使我的视图从场景开始,并为从顶部飞入的视图设置动画? 我考虑过设置垂直中心约束的动画

  • 问题内容: 我想要一个使用样式的单元格。 我最初的Objective-C代码是: 在已经在SO上搜索了几个问题之后,我想像这样在Swift中编写它: 但这并不能让我说我想要一种风格。所以我尝试了这个: 这给了我一个牢房,但是却没有让我。 我已经研究了更多内容,并观看了此视频教程,但是他创建了一个单独的对象,我认为这是不必要的,因为我之前在Obj- C中实现了相同的效果。 有任何想法吗?谢谢。 问题

  • 问题内容: 在早期版本的Swift中,可以使用以下代码创建延迟: 但现在,斯威夫特3时,Xcode自动改变6个不同的东西,但随后出现以下错误:“无法转换到预期值又名”。 在Swift 3中运行一系列代码之前,如何创建延迟? 问题答案: 经过大量研究,我终于找到了答案。 这会在Swift 3和Swift 4中创建所需的“等待”效果。