对于 UIScrollview,我如何使用自己的 panGestureRecognizer 但允许 scrollView 使用其识别器进行反弹?

Posted

技术标签:

【中文标题】对于 UIScrollview,我如何使用自己的 panGestureRecognizer 但允许 scrollView 使用其识别器进行反弹?【英文标题】:For UIScrollview, how can I use my own panGestureRecognizer but allow the scrollView to use its recognizers for bounces? 【发布时间】:2012-12-13 03:32:56 【问题描述】:

我想在 contentSize 内实现我自己的平移滚动,但允许 scrollView 处理 contentSize 之外的反弹。我似乎无法让它工作。

我尝试过 requiresGestureRecognizerToFail:,将它设置在所有 scrollView 的识别器和我的 pan 之一之间。

我还尝试在我的平移识别器上实现三个委托方法,当 contentOffset 超出 contentSize 时返回 YES。

欢迎任何提示或建议!即使您不知道解决方案,但有一个可行的想法,请发布!谢谢。

【问题讨论】:

【参考方案1】:

实现UIGestureRecognizerDelegate

用这个方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

并在内部进行条件检查,禁用滚动视图,并让手势控制...类似于(完全组成数字):

if (self.scrollView.contentSize > 100) 
    self.scrollView.scrollEnabled = NO;
    [self performSelector:@selector(reenableScrollView) afterDelay:0.3f];
    return YES;
 else 
    return NO;

然后重新启用滚动视图

- (void)reenableScrollView 
    self.scrollView.enabled = YES;

【讨论】:

仅靠自己?当我这样做时,滚动视图识别器似乎覆盖了我的,即使我返回 no 你确定方法被调用了吗? ..你放了一个断点,或者一个 NSLog 在那里,它被击中了? 滚动视图识别器有优先权吗? 我的平移识别器现在没有被调用。我可以稍后制作一个迷你项目来展示我在做什么。似乎应该接收触摸的手势识别器是我自己的......我正在阻止我自己的识别器!委托在我的平移识别器上设置,滚动视图无法更改

以上是关于对于 UIScrollview,我如何使用自己的 panGestureRecognizer 但允许 scrollView 使用其识别器进行反弹?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我自己的自定义视图中重现 iPhone UIScrollView 的轻弹滚动行为?

如何同步无限的 UIScrollView?

像滚动一样的 UIScrollView 是如何工作的?

如何在 UIScrollView 中绘制自定义形状

UIScrollView 如何改变框架,但不改变边界? UIScrollView 是如何工作的?

如何配置 UIScrollView 使可见区域永远不会超出背景图像?