我一直试图只在一个方向上滚动UIScrollView
并仍然获得所有UITouch
个事件。我完全不确定这是可能的。
我试图覆盖UIResponder
的“触摸”事件,但只要UIScrollView
开始滚动,触摸方法就会停止调用。
然后我尝试将UIScrollView
的{{1}}属性设置为false,直到我希望scrollEnabled
开始接收拖动事件,但我似乎无法找到方法UIScrollView
开始在拖动中接收触摸事件。 这可能吗?
我的下一次尝试是在滚动视图中添加“填充”,并通过使用UIScrollView
属性创建自己的“触摸事件”,但这开始调用contentOffset
过多次并且像疯了一样处理 - 也是回答有效性的一些问题。
我使用过scrollViewDidScroll:
,hitTest:withEvent:
,pointInside:withEvent:
和touchesShouldBegin:withEvent:inContentView:
但没有取得任何成功。
我尝试过其他一些事情,但是没有一个有效。另外,根据我的发现,将touchesShouldCancelInContentView:
设置为false会破坏滚动响应。
我会喜欢一些真正的重写的触摸方法。如果我不调用超级的方法,则delaysContentTouches
不会接收到触摸。
我需要一种方法来获取UIScrollView
es(拖拽,开始,释放和取消,而不仅仅是点击),而不会影响UITouch
的滚动,因为{滚动开始后,{1}}“触摸”事件会立即下降。这可能吗?
答案 0 :(得分:1)
如果您只想检测常见touches
,请尝试将gesture recognizers
UITapGestureRecognizer
添加到view
,即使UIScrollView
也可以使用。{ / p>
您还可以尝试在UIView
上方放置一个透明的scrollview
,以检测某些touches
,然后将其余内容传递给scrollview
。
答案 1 :(得分:0)
当您开始滚动保存偏移的副本时。然后在完成滚动时检查它。此代码允许向左滚动但阻止其向右滚动
CGPoint oldOffset;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
oldOffset = scrollView.contentOffset;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.x < oldOffset.x) {
[scrollView setContentOffset:oldOffset];
}
}