我有一个应用程序,其底部放置了一个可拖动的Uiview。可拖动的视图并非完全在屏幕上,并且具有一个“拉动”选项卡,用户可以向上或向下拖动。当前拖动上下有效,但我想给它与Apple通知滑出抽屉相同的行为。

例如,如果我将视图向上拖出50%并从屏幕上卸下手指,那么我希望拖动视图继续自行移动。同样,如果用户仅将视图拖出,说30%向上,则视图应下降到其默认位置。

理想情况下,虽然我可以上/向下拖动,但运动不是非常“有机”。

目前,我通过UipangeSturerognizer来完成拖动,以防该问题相关。

这可能是符合可拖动视图的Y位置的一些聪明数学的线条,然后用一些caanimations进行剩下的移动?

可能很难可视化,因此我在下面添加了一些屏幕。

默认屏幕带有底部的A视图

视图通过右侧的标签拖动

谢谢!

有帮助吗?

解决方案

当你的 UIPanGestureRecognizer的状态变成 UIGestureRecognizerStateEnded, , 使用 velocityInView: 消息以找到手势的速度。

如果速度接近零,请根据视图的位置和先前的视图打开或关闭视图。例如,如果该视图已封闭,并且已将其拉出超过10%,则将其打开。如果它开放并已将其拉出超过10%,请关闭。否则,将其移回到其预势位置。

如果速度不接近零,请使用Y组件的符号来确定视图的新状态。如果标志是积极的,请仔细观察。如果符号为负,请打开视图。

您将不得不进行试验,以确切找出“接近零”的定义最佳。

无论如何,您都希望使用短时间(可能在.1和.25秒之间)将视图动画到其最终位置。您可能需要根据速度和视图所需的距离选择持续时间。系统通知面板会这样做。 (尝试将其慢慢拖动与快速拖动。它以不同的速度使其最终位置动画,具体取决于您放手时拖动的速度。)

您将要尝试找到最佳动画曲线(UIViewAnimationOptionCurveEaseOut, 等等),并且您可能需要使用不同的曲线,具体取决于您是打开还是关闭手势的视图和速度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top