交互转场+结束动画怎么做?
How to do interactive transition + ending animation?
通常,我们可以使用 UIViewControllerAnimatedTransitioning
的 animateTransition
进行交互式转换,并通过 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
通常,我们可以使用 UIViewControllerAnimatedTransitioning
的 animateTransition
进行交互式转换,并通过 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