通常,我们可以使用 UIViewControllerAnimatedTransitioning
的 animateTransition
进行交互式过渡,并通过 UIPercentDrivenInteractiveTransition
更新进度。
问题: 如何让交互过渡开始,然后当我们通过某个阈值时,执行不同的结束动画?
我在这里想要实现的是关闭 App store 的今日卡片 (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
关于ios - 交互转场+结束动画怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695405/