2

我一直试图只UIScrollView在一个方向上滚动并仍然获得所有UITouch事件。我根本不完全确定这是可能的。

我试图覆盖UIResponder“触摸”事件,但是一旦UIScrollView开始滚动,触摸方法就会停止调用。

然后我尝试将UIScrollView'scrollEnabled属性设置为 false ,直到我希望UIScrollView开始接收拖动事件,但我似乎无法找到一种方法让UIScrollView开始在拖动中接收触摸事件。这可能吗?

我的下一次尝试是在滚动视图中添加“填充”并通过玩弄该contentOffset属性来创建我自己的“触摸事件”,但这开始调用scrollViewDidScroll:过多的时间并疯狂地处理——还有一些响应有效性的问题.

我玩过hitTest:withEvent:, pointInside:withEvent:touchesShouldBegin:withEvent:inContentView:touchesShouldCancelInContentView:没有任何成功。

从那以后,我尝试了其他一些方法,但都没有奏效。此外,根据我的发现,设置delaysContentTouches为 false 会破坏滚动响应。

我会喜欢一些真正的覆盖触摸方法。如果我不调用 super 的方法,则UIScrollView不会收到触摸。

我需要一种方法来获取UITouches (拖动、开始、释放和取消,而不仅仅是点击),而不影响 的滚动UIScrollView,因为UIResponder一旦滚动开始,“触摸”事件就会消失。这可能吗?

4

2 回答 2

1

如果您只是想检测常见touches的,请尝试将gesture recognizerslike附加UITapGestureRecognizer到您的view,它们甚至应该与UIScrollView.

您还可以尝试在UIView检测scrollview到一些touches并将其余部分传递给scrollview.

于 2013-04-29T19:44:25.030 回答
0

当您开始滚动时,保存偏移量的副本。然后在完成滚动时检查它。此代码允许向左滚动但阻止它向右滚动

CGPoint oldOffset;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    oldOffset = scrollView.contentOffset;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < oldOffset.x) {
        [scrollView setContentOffset:oldOffset];
    }
}
于 2013-04-29T21:22:23.850 回答