动画视图并中途停止

Posted

技术标签:

【中文标题】动画视图并中途停止【英文标题】:Animate view and stop midway 【发布时间】:2018-03-29 08:50:38 【问题描述】:

我想制作一个视图/标题折叠/展开动画,但我也希望能够在用户将手指从屏幕上移开时暂停或停止展开/折叠。

我有一个当前的实现,但是动画不是很流畅。

我还会添加一些图片来更好地解释我想要做什么。

所以第一张图片是展开后的样子。

第二张图片是当用户决定将手指从屏幕上移开时的外观,同时他将缓慢滚动,因此动画/视图应该停止在与此类似的状态。

第三张图片是折叠后的样子。

如果有人对我如何实现这一点有任何建议,我将不胜感激。

【问题讨论】:

显示你已有的代码 我已经拥有的代码需要完全替换。它是由另一个开发人员制作的,它是由一些工具生成的。我想从头开始 【参考方案1】:

如果您的目标是 ios 10+,请使用 UIViewPropertyAnimator 封装动画并允许擦洗和控制动画:

开始、暂停、恢复和停止动画;请参阅UIViewAnimating 协议的方法。

在原始动画开始后使用addAnimations(_:)addAnimations(_:delayFactor:) 方法添加动画块。

通过修改 fractionComplete 属性来清理暂停的动画。

使用isReversed 属性更改动画的方向。

通过暂停动画并使用continueAnimation(withTimingParameters:durationFactor:) 方法完成它来修改部分完成动画的时间和持续时间。

您只需将触摸连接到封装动画的UIViewPropertyAnimator 对象。

有很多关于如何开始使用它的好教程,例如this one.

【讨论】:

我很想用这个,只是看了关于这个的 wwdc 视频,但我不确定如果用户拿开手指,我是否可以让视图保持在第二张图片中的状态从屏幕上。当手指不在屏幕上时,视图不会进入完全展开/折叠状态吗? @razvan 这取决于你如何实现它。我相信这是要走的路。当然你必须处理这些案例并定义你希望它的行为方式,但是@987654331 @ 将允许您这样做 好的,谢谢。我会尝试使用 UIViewPropertyAnimator

以上是关于动画视图并中途停止的主要内容,如果未能解决你的问题,请参考以下文章

即使您在中途停止悬停,如何强制动画完成然后反转以开始悬停?

中途停止悬停()

我可以立即停止第一个 UIView 动画并在同一视图上启动第二个动画吗?

使用标签栏关闭视图控制器后动画不会停止

停止动画不适用于图像视图

停止无限约束动画