gpt4 book ai didi

ios - Swift:处理自定义幻灯片菜单中的快速滑动

转载 作者:行者123 更新时间:2023-11-29 05:15:31 25 4
gpt4 key购买 nike

我有一个带有平移手势redView: UIView。它只能水平滑动。我希望这个 View 在向左滑动时停止在某个点。

目前,如果缓慢/正常滑动,它就会按预期工作。但是,如果滑动速度比平均速度快/非常快, View 会在所需点后一段距离处停止。

我在 UIPanGestureRecognizer.State 开关中使用 guard 语句,如下所示:

case .changed:
guard abs(redViewX) < 150 else { return }
//do magic

因此,如果滑动速度更快, View 可能会停在 x = 160171 等位置。这取决于您实际滑动的速度。

您是否知道如何将 View 停止在所需的点,以便用户甚至无法滑动到 150 + 1 点?

<小时/>

更新:

我终于解决了这个问题。这是结果:

这是我想出的一个简化的解决方案:

func expandMenu(_ value: Bool) {
UIView.animate(withDuration: 0.1, delay: 0, options: .curveEaseOut, animations: {
redView.frame.origin.x = value ? -150 : 0
gesture.setTranslation(.zero, in: self.view)
}, completion: nil)
}

switch gesture.state {
case .changed:
let swipingToLeft = translation < 0

if swipingToLeft {
guard abs(redViewX) < yellowViewWidth else { return }

if abs(translation) + abs(redViewX) > yellowViewWidth {
expandMenu(true)
} else {
redView.frame.origin.x += translation
}
gesture.setTranslation(.zero, in: view)
} else {
guard redViewX < 0 else { return }

if translation - abs(redViewX) > 0 {
expandMenu(false)
} else {
redView.frame.origin.x += translation
}
gesture.setTranslation(.zero, in: view)
}
}

最佳答案

当滑动速度很快时,transition.x 值可能会跳跃,在这种情况下,您似乎没有正确处理更新。例如,origin.x 从 250 跳到 190,看起来您忽略了此更新。我建议你将守卫内的 myView.frame.origin.x 设置为 200,这样它就不会卡在中间。如果它没有帮助 - 提供更多代码以使问题更清楚。

关于ios - Swift:处理自定义幻灯片菜单中的快速滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com