gpt4 book ai didi

ios - 如何判断 UIPageViewController 翻页是由于滑动/平移还是点击

转载 作者:行者123 更新时间:2023-11-28 23:36:04 26 4
gpt4 key购买 nike

当使用 UIPageViewController 时,用户可以向右或向左滑动以创建跟随他们的手指的动画翻页。或者用户只需点击页面 View 的一侧或另一侧即可翻页。当翻页动画完成时,会调用委托(delegate)方法pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:方法。

我希望我的最终页面状态略有不同,具体取决于用户是通过滑动还是点击来翻页。但是我想不出一种可靠的方法来确定导致翻页的原因。 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: 方法不提供该信息。

在我的 UIPageViewController 委托(delegate) (self) 中,调用了 gestureRecognizer:shouldReceiveTouch: 方法,但它是针对滑动(平移)和点击手势识别器调用的即使用户最终只使用了一个或另一个手势。在任一手势触摸屏幕时调用委托(delegate)手势方法。所以这没有帮助。

我在页面 View 中添加了一套触摸相关的拦截方法。对于 touchesBegan:withEvent: 我重置了一个标志。对于点击手势不会调用的 touches:moved:,我设置了标志。这种方法可行,但它的级别太低,并且对于将来也移动但不是滑动/平移的其他某种手势可能无法正常工作。而且 UIPageViewController 的点击手势似乎完全吞噬了触摸事件,因此甚至没有调用 touchesBegan:withEvent: (这很奇怪)。

事后有什么方法可以稳健地区分UIPageViewController使用哪种翻页方式(点击或平移/滑动)来处理用户翻页的交互?

最佳答案

gestureRecognizer:shouldReceiveTouch:您可以检查手势类型。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if gestureRecognizer is UITapGestureRecognizer {
self.wasTap = true;
self.wasSwipe = false;
} else if gestureRecognizer is UISwipeGestureRecognizer {
self.wasTap = false;
self.wasSwipe = true;
}
return true;
}

然后在 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: 中根据 true bool 值更改最终页面的状态。

关于ios - 如何判断 UIPageViewController 翻页是由于滑动/平移还是点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873328/

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