交互转场+结束动画怎么做?

How to do interactive transition + ending animation?

通常,我们可以使用 UIViewControllerAnimatedTransitioninganimateTransition 进行交互式转换,并通过 UIPercentDrivenInteractiveTransition 更新进度。

问题: 如何让交互过渡开始,然后当我们通过某个阈值时,执行不同的结束动画?

我在这里想要实现的是关闭 App store 的 Today 卡片 (https://gph.is/2qgcGHd)。我们可以通过平移屏幕的左边缘以交互方式缩小卡片。然后,当它到达该点时,卡片会以动画方式返回主页,没有任何交互性。对我来说,这似乎是互动+动画过渡的结合。


我试过的: 我尝试在 UIView.animateWithKeyFrames 中将动画分成两部分,每部分相对时间为 0.5。然后当进度达到 0.5 时,我调用 finish()(属于 UIPercentDrivenInteractiveTransition)来执行第二个动画。它那里有一些小故障,就像一个黑客。想知道有没有更好的办法。

最后,我使用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

如果是,在UIPercentDrivenInteractiveTransition子类上调用finish(),它会自动设置结束关闭动画。

万一有人好奇,这就是我正在玩的东西: AppStoreTodayInteractiveTransition