假设我有一个动画师,将视图从
我将其与
实际上,我想要实现的是设置
而现在
以下是一些示例,以可视化此问题:
我目前拥有的:
我想要实现的:
编辑(1月19日):
抱歉我的回复延迟了。以下是一些澄清:
我没有使用
例如,您将视图拖动到一半。这意味着剩余部分的持续时间应为总持续时间的两倍。或者如果你拖动99%的距离,它应该几乎立即完成剩余部分。
此外,
所有这些简单的UIView动画都无法实现,或者最多需要大量努力。它仅适用于简单的过渡,而这不是这种情况。
这就是为什么我必须使用某种动画器的原因。
正如我在被其发布者删除的答案的评论线程中提到的那样,我在这里最复杂的部分是模拟摩擦效应:您拖得越远,视图实际移动的越少。就像当您尝试将任何UIScrollView拖出其内容之外时一样。
感谢你们的努力,但我不认为这两个答案都是相关的。我会尽可能在最近的一两周内使用
(0, 0)
移动到(-120, 0)
:let frameAnimator = UIViewPropertyAnimator(duration: duration, dampingRatio: 0.8)
animator.addAnimations {
switch state:
case .normal: view.frame.origin.x = 0
case .swiped: view.frame.origin.x = -120
}
}
我将其与
UIPanGestureRecognizer
一起使用,以便可以随着手指的移动连续调整视图大小。当我想在动画的开头或结尾添加某种弹跳效果时出现问题。我不仅需要阻尼比,还需要弹跳效果。最容易想象这种情况的方法是UITableViewCell
的滑动删除功能,在该功能中,您可以将“删除”按钮拖动到其实际宽度之外,然后它会反弹回来。实际上,我想要实现的是设置
fractionComplete
属性在[0, 1]
段之外的方法,因此当分数为1.2
时,偏移量变为最大值120的144
。而现在
fractionComplete
的最大值恰好是1
。以下是一些示例,以可视化此问题:
我目前拥有的:
![enter image description here](https://istack.dev59.com/C9X8B.gif)
![enter image description here](https://istack.dev59.com/fEMAB.gif)
抱歉我的回复延迟了。以下是一些澄清:
我没有使用
UIView.animate(...)
,而是使用UIViewPropertyAnimator
,因为它可以为我处理所有时序、曲线和速度。例如,您将视图拖动到一半。这意味着剩余部分的持续时间应为总持续时间的两倍。或者如果你拖动99%的距离,它应该几乎立即完成剩余部分。
此外,
UIViewPropertyAnimator
还具有暂停(当用户再次开始拖动时)或反转(当用户开始向左拖动,但之后改变主意并将手指移向右侧)等功能,我也从中受益。所有这些简单的UIView动画都无法实现,或者最多需要大量努力。它仅适用于简单的过渡,而这不是这种情况。
这就是为什么我必须使用某种动画器的原因。
正如我在被其发布者删除的答案的评论线程中提到的那样,我在这里最复杂的部分是模拟摩擦效应:您拖得越远,视图实际移动的越少。就像当您尝试将任何UIScrollView拖出其内容之外时一样。
感谢你们的努力,但我不认为这两个答案都是相关的。我会尽可能在最近的一两周内使用
UIDynamicAnimator
来实现这种行为。如果我有什么好的结果,我会发布我的方法。
编辑(1月20日):
我刚刚在GitHub上上传了一个演示项目,其中包括我项目中所有的转换。现在你可以真正地理解为什么我需要使用动画器以及我如何使用它们:https://github.com/demon9733/bouncingview-prototype
你唯一感兴趣的文件是MainViewController+Modes.swift
。所有与过渡和动画相关的内容都在那里。
我需要做的是让用户能够以阻尼效果拖动处理区域超出“隐藏”按钮宽度。在将处理区域向左滑动时,“隐藏”按钮将出现。
P.S. 我并没有真正测试这个演示,所以它可能有我主要项目中没有的错误。因此,你可以放心地忽略它们。
UIDynamicAnimator
。但我仍然不确定它是否能够实现弹跳动画。 - demon9733UITableViewCell
时的默认行为。而第一张图片是我的普通UIView
,我想模仿这种弹跳效果。问题是,我如何在UIView
中获得这种弹跳效果,而不是在UITableViewCell
中? - demon9733UIPanGestureRecognizer
会触发抖动效果。这与动画完成块无关。 - demon9733