2013-04-29 100 views
2

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

我试着覆盖UIResponder的“触摸”事件,但只要UIScrollView开始滚动,触摸方法就不会被调用。

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

我的下一个尝试添加“填充”滚动视图,并通过与contentOffset财产玩耍创造我自己的“触摸事件”,而是开始叫scrollViewDidScroll:倍过量和处理想疯了 - 还有些问题与答复的有效性有关。

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

我试过其他一些东西,因为,但都没有工作。另外,从我发现的情况来看,将delaysContentTouches设置为false会破坏滚动响应。

我会喜欢一些real重写触摸方法。方法,如果我不叫超级,UIScrollView没有收到触摸。

我需要一种方式来获得UITouch ES(拖动时开始,发布和取消,而不仅仅是水龙头),而不影响UIScrollView的滚动,因为UIResponder“触摸”事件尽快落为滚动启动。这可能吗?

回答

1

如果你只是想检测常见touches,尝试连接gesture recognizersUITapGestureRecognizerview,他们甚至应该有UIScrollView工作。

您也可以尝试在scrollview的顶部检测一些touches并将其余的scrollview放置一个透明UIView

+0

传递触摸中间拖动不允许滚动视图滚动。另外,我不是在寻找点击,而是触及所有事件(特别是拖动)。 – RileyE 2013-04-29 19:45:56

+1

然后尝试制作一个自定义手势识别器,捕获您想要的事件。看到这个:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html#//apple_ref/occ/cl/UIGestureRecognizer – txulu 2013-04-29 19:57:17

+0

这可能是有用的:http: //iphonedevsdk.com/forum/iphone-sdk-tutorials/9213-detect-touch-in-scrollview-tutorial.html – txulu 2013-04-29 19:59:46

0

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

CGPoint oldOffset; 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    oldOffset = scrollView.contentOffset; 
} 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.x < oldOffset.x) { 
     [scrollView setContentOffset:oldOffset]; 
    } 
} 
+0

我很欣赏这个想法,但我需要拖动触摸。这只会给我起点和终点之间的距离。 – RileyE 2013-04-29 21:25:56