iOS Swift UIView 动画跳回到开头

Posted

技术标签:

【中文标题】iOS Swift UIView 动画跳回到开头【英文标题】:iOS Swift UIView animation jumps back to the beginning 【发布时间】:2020-06-10 15:47:41 【问题描述】:

我对 swift 很陌生,有一个小问题。我在互联网上搜索了几个小时,找不到任何解决方案,所以这是我最后的希望! 我正在制作一个小游戏,里面有一个 UIView。我使用 UIView.animate() 将其动画到屏幕上的随机位置。问题是,当我用另一个视图制作另一个动画时,之前的动画视图会跳回到它在屏幕上的初始位置。 这是我用来为视图设置动画的代码:

UIView.animate(withDuration: 1.0, delay: 0.0, options: .curveEaseInOut, animations: 
            self.skull.frame = CGRect(x: xSkull, y: ySkull, width: self.skull.frame.size.width, height: self.skull.frame.size.height)
        , completion: nil)

例如,如果调用头骨的 UIView 在情节提要中被限制为 x:50 和 y:200,并且我为它设置动画,例如到 x:120,y:400,它可以找到并正确设置动画。但是当我按下暂停按钮时,点击时会有一点缩放动画,头骨会跳回到 x: 50, y: 200。 当我尝试为视图约束的常量设置动画时,它只是跳转并且根本没有动画:

UIView.animate(withDuration: 1.0, delay: 0.0, options: .curveEaseInOut, animations: 
            self.skull_xConstraint.constant = xSkull
            self.skull_yConstraint.constant = ySkull
        , completion: nil)

我真的不确定我做错了什么,也许是自动布局的问题,但就像我说的,我是 swift 新手,互联网也帮不了我。 所以提前感谢您的帮助!

【问题讨论】:

你使用的是约束还是框架? 当我尝试为约束的常量设置动画时,它只是跳跃并且根本没有动画。 【参考方案1】:

你需要像这样在动画中布局子视图

      self.skull_xConstraint.constant = xSkull
      self.skull_yConstraint.constant = ySkull
      UIView.animate(withDuration: 1.0, delay: 0.0, options: .curveEaseInOut, animations: 
           self.view.layoutIfNeeded()
        , completion: nil)

【讨论】:

然后我收到错误“'GameViewController' 类型的值没有成员'layoutIfNeeded'” 更新了我的答案... GameViewController 视图有成员

以上是关于iOS Swift UIView 动画跳回到开头的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中重复 alpha 动画

UIView transform.scaleBy 动画不起作用

如何在 iOS Swift 中制作加载动画?

如何让 UIView / Menu 滑入和滑出? (使用 C# 而不是 Swift 的 Xamarin IOS)

动画:将 UIView 在屏幕上上下移动高度 - SWIFT

Swift 3 UIView 动画