如何根据后者的进度为已经运行的动画添加动画?

Posted

技术标签:

【中文标题】如何根据后者的进度为已经运行的动画添加动画?【英文标题】:How to add animations to an already running animation based on the progress of the latter? 【发布时间】:2019-03-13 16:11:18 【问题描述】:

目标

构建一个复杂的动画,其中一些动作会根据其进度触发。

问题

是否可以检查UIViewPropertyAnimator 的进度并在达到给定分数时添加动画完成:

不使用UIView.animateKeyframes 不需要用户 干预

换句话说,当动画师达到给定的fractionComplete时,会添加一些动画。

问题

完整的动画包含不同对象的多个动画(存储在一个数组中)。我需要在给定时间添加动画(基于完成百分比)并在某些动画完成时添加动作

感谢您的帮助!

【问题讨论】:

只是一个注释 - 这可能很有用克里斯***.com/a/47536770/294884 谢谢@Fattie。我经常使用 CATransaction,它确实非常有用。我实际上是在使用它来禁用 fullAnimation 中的一些动画。可悲的是,它不适用于我的目的...... 哥奇亚。顺便说一句,这篇文章是否有帮助:medium.com/@thibault.wittemberg/… 谢谢 :) 确实很有趣。乍一看更多的是链接动画而不是观察,但我会深入研究它:) 对,ios 中的动画中没有“触发器”(如果您还使用游戏引擎?)......所以我的意思是,我可能会误解你,但我只是开始一个计时器(获取动画长度并乘以分数以获取秒数)。我可能再次误解了这里的需要!欢呼 【参考方案1】:

在某些属性中,您可以控制 delayFactor 以添加动画以替换先前的目标。

       let animView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 200))
    animView.backgroundColor = UIColor.green

 animator =    UIViewPropertyAnimator.init(duration: 5.0, curve: UIView.AnimationCurve.easeInOut)

    view.addSubview(animView)
    animator.addCompletion  (position : UIViewAnimatingPosition) in
        if position == UIViewAnimatingPosition.end
            animView.center  = CGPoint.init(x: 100, y: 300)
        
    
    animator.addAnimations(
        animView.center  = CGPoint.init(x: 600, y: 300)
    )
    animator.addAnimations(

        animView.center = CGPoint.init(x: 200, y: 200)
    , delayFactor: 0.1)
    animator.addAnimations(

        animView.center = CGPoint.init(x: 300, y: 600)
    , delayFactor: 0.5)
    animator.addAnimations(

        animView.center = CGPoint.init(x: 400, y: 400)
    , delayFactor: 0.9)

        animator.startAnimation()

【讨论】:

感谢@E.Coms!几分钟前我真的碰到了它,我正要发布它。这正是我一直在寻找的东西。我还有一些问题需要解决,但那是编码,对吧?【参考方案2】:

UIView 动画专为轻量级动画而设计。

如果你想构建复杂的动画,我认为最好使用CAAnimation。

您可以使用CAAnimationGroup 和keyTimes 对它们进行同步和分组。

一个可能有帮助的参考资料是来自 raywenderlich.com 的“How to Create a Complex Loading Animation in Swift”教程

【讨论】:

谢谢亚历克斯。我已经尝试过 CAAnimation,但我有太多的属性来制作动画。 PropertyAnimators 让我 1/ 能够轻松地刷入,2/ 在同一个地方为各种属性设置动画。

以上是关于如何根据后者的进度为已经运行的动画添加动画?的主要内容,如果未能解决你的问题,请参考以下文章

基于英雄动画进度的变换

如何将事件监听器添加到动画变换旋转?

超赞圆形动画进度条,爱了爱了(使用HTMLCSS和bootstrap框架)

超赞圆形动画进度条,爱了爱了(使用HTMLCSS和bootstrap框架)

Swift Progress View 动画使进度条超过 100%

如何将自定义动画作为 Flutter 进度/加载指示器?