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

标签 ios swift uikit uiviewanimationtransition

通常,我们可以使用 UIViewControllerAnimatedTransitioninganimateTransition 进行交互式过渡,并通过 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/

相关文章:

ios - NSMutableAttributedString 知道哪个文本的颜色在哪里改变

ios - 基本的 iOS 十进制修剪

iphone - 获取属于与核心数据一对多关系的实体的所有对象

swift - #selector 的参数不能引用属性

ios - 在uitextview中消失键盘

ios - 可以让 UIButton sizeThatFits 工作吗?

ios - 如何将 UISwitch 嵌入到静态 UITableView 中?

ios - 如何检测可操作通知的触发日期

swift - 决定什么方法去哪个文件

ios - UITableView - 在滚动时它会丢失与选定单元格关联的属性。如何保存这些属性? - swift