我有一个没有垂直滚动的UIScrollView,并且我强制一个特定的偏移(只有x),以防偏移试图变得小于该特定偏移。
我使用setContentOffset:animated:
函数,animated
参数为YES
。正确强制偏移。
强制偏移后,'有时'向与初始滚动方向相反的方向滚动被阻挡。说,我用手指从左到右滚动,并强制它偏移,然后我不能再从右向左滚动。
但问题是,如果我在屏幕上点击,滚动开始发生。我无法平移,但如果我点击屏幕,或点击任何按钮,滚动开始工作。如果我尝试以编程方式调用按钮按下方法,比如5秒强制偏移,则它不起作用。看来我需要以某种方式触摸屏幕..
我检查了contentOffset
,contentSize
的值,它们看起来很好。
PS:有时在强制偏移后没有调用scrollViewDidEndScrollingAnimation:
方法,但这不一定是问题。
编辑:实际上,当我使用我的手指将滚动视图超出阈值偏移量并且继续向左平移时,会发生这种情况。在阈值点,平移停止,但下次我尝试滚动时,它不会平移。 (也就是说,我不会让一个混蛋超出门槛)。
编辑:还有一个可能的漏洞:在强制使用新的offfset之前,我使scrollEnabled
等于NO
,并在给出设置新偏移量的命令后,我把它设置回YES
。我需要这样做,以便如果我尝试使用加加速度滚动滚动视图,它会在尝试设置新偏移时向左滚动,因为启用了分页。
编辑:可能是因为我在实际使用触摸滚动时将scrollEnabled
设置为NO
吗?我稍后会启用它,但也许这是一个问题......
重要编辑:如果我长按scrollView,然后尝试移动,滚动视图会开始滚动!
修改:此代码位于scrollViewDidScroll:
if ((theScrollView.contentOffset.x < theScrollView.frame.size.width)
&& [currentlyDisplayedVC isEqual:VC1])
{
//if this is not done, and this call happens when VC3
//is visible a bit too much, scrollView scrolls till VC3.
scrollView.scrollEnabled = NO;
[scrollView setContentOffset:CGPointMake(scrollView.frame.size.width, 0) animated:YES];
scrollView.scrollEnabled = YES;
//this is done so that this block is not reached everytime during scroll animation.
currentlyDisplayedVC = VC2;
}
然后在scrollViewDidEndWithANimation:
我添加[self VC2reached]
答案 0 :(得分:1)
您是否尝试过使用setUserInteractionEnabled:NO
和YES
来停止/允许用户与UIScrollView交互而不是使用scrollEnabled
属性?
答案 1 :(得分:1)
我将UIScrollView子类化并覆盖方法touchesShouldBegin:withEvent:inContentView:
。在方法中,当我看到视图卡住时,我返回NO
特定时刻,以便滚动视图接收所有触摸,而不是将它们传递给任何其他contentView。这解决了这个问题。
编辑:实际上并没有解决问题。我想在尝试滚动滚动视图时不允许触摸contentView ON,而不是在尝试点击contentView等其他事件时。但是在我发布的解决方案中,所有触摸都将保留滚动视图。我们有类似的touchMoved:
方法吗?
答案 2 :(得分:1)
而不是使用setContentOffset:animated:
您应该尝试使用scrollRectToVisible:animated: