代码之家  ›  专栏  ›  技术社区  ›  aunnnn

如何进行交互式过渡+结束动画?

  •  1
  • aunnnn  · 技术社区  · 6 年前

    通常,我们可以使用 animateTransition 属于 UIViewControllerAnimatedTransitioning 并通过以下方式更新进度 UIPercentDrivenInteractiveTransition

    问题: 如何首先进行交互式转换,然后当我们通过某个阈值时,执行不同的结束动画?

    我想在这里实现的是类似于取消App store的“今日卡”( https://gph.is/2qgcGHd )。我们可以通过平移屏幕的左边缘以交互方式缩小卡。然后,当它到达该点时,卡会以动画形式返回主页,而没有任何交互。对我来说,这似乎是交互式+动画过渡的组合。


    我所尝试的: 我试着在 UIView.animateWithKeyFrames 通过将动画分为两个部分,每个部分的相对时间为0.5。当进度达到0.5时,我调用 finish() (共个) UIPercentDrivenInteractiveTransition )执行第二个动画。它有一些小故障,就像一个黑客。想知道是否有更好的方法来做到这一点。

    1 回复  |  直到 6 年前
        1
  •  0
  •   aunnnn    6 年前

    最后,我使用 UIView.animateKeyFrames 将交互式过渡划分为两部分动画(如问题中所述):

    let progressUntilDismissing = 0.4
    UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: [], animations: {
    
                    UIView.addKeyframe(withRelativeStartTime: 0.0,
                                       relativeDuration: progressUntilDismissing,
                                       animations: {
                            // interactive dismissing animation...
                    })
    
                    UIView.addKeyframe(withRelativeStartTime: progressUntilDismissing,
                                       relativeDuration: (1 - progressUntilDismissing),
                                       animations: {
                            // closing dismissing animation...
                    })
                }) { (finished) in
                 //...
    }
    

    然后在平移手势识别器中,我计算平移进度并确定是否通过 progressUntilDismissing 或者不是。

    如果是,请致电 finish() 在…上 UIPercentDrivenInteractiveTransition 子类,它将自动设置关闭解除动画的动画。

    如果有人好奇,这就是我在玩的游戏: AppStoreTodayInteractiveTransition