Swift - 动画后恢复 x 位置

Posted

技术标签:

【中文标题】Swift - 动画后恢复 x 位置【英文标题】:Swift - Reverting x positions after an animation 【发布时间】:2020-12-29 16:16:43 【问题描述】:

我的基本动画效果很好。唯一的问题是,如果再次触发这个动画,我动画的两个圆圈的x值不会恢复正常,因此会弄乱动画。起初我认为这可以通过捕获原始 X 值并将圆圈放回那些原始 X 位置来解决,这样动画就可以一遍又一遍地发生,但是当我使用完成时,在第一个动画之后,圈子就是不动。没有完成,他们继续移动,直到他们离开屏幕。

func load() 
    let originalTealX = tealBubble.layer.position.x
    let originalGreenX = greenBubble.layer.position.x

    UIView.animate(withDuration: 0.5, delay: 0, options: [.autoreverse, .repeat], animations: 
      [greenBubble, tealBubble, size] in
      tealBubble.layer.position.x -= (UIConstants.spacing * 2 + CGFloat(size))
      greenBubble.layer.position.x += (UIConstants.spacing * 2 + CGFloat(size))
    , completion:  [greenBubble, tealBubble] _ in
      tealBubble.layer.position.x = originalTealX
      greenBubble.layer.position.x = originalGreenX
      )
    

我希望我是愚蠢的,只是错过了一些简单的事情。提前感谢您的帮助! :)

【问题讨论】:

什么是CGFloat(size)size 应该是不能转换为标量的 CGSize 【参考方案1】:

您的动画块永远不会到达完成块,因为您设置了标志repeat。动画永远持续下去。

【讨论】:

以上是关于Swift - 动画后恢复 x 位置的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 UIView 动画

无论我是在主时间轴动画还是子/孙 MC 动画上暂停,如何从最后一个位置恢复动画?

如何平滑地将 CSS 动画恢复到当前状态?

如何在 Swift 中的位置上设置加扰字母的动画?

窗口最小化再恢复后恢复 NSProgressIndicator 动画

Swift3 中的 UIView 动画