我有一个没有垂直滚动的 UIScrollView,并且我在其上强制一个特定的偏移量(只有 x),以防偏移量试图变得小于该特定偏移量。我使用setContentOffset:animated:
函数,animated
参数为YES
. 偏移被正确强制。
在我强制偏移后,“有时”在与初始滚动方向相反的方向上滚动会被阻止。说,我用手指从左到右滚动,并强制它偏移一些,然后我不能再从右到左滚动了。
但问题是,如果我在屏幕上进行任何点击,滚动就会开始发生。我无法平移,但如果我点击屏幕或点击任何按钮,滚动就会开始工作。如果我尝试在之后以编程方式调用按钮按下方法,例如强制偏移 5 秒,那么它不起作用。看来我需要以某种方式触摸屏幕..
我检查了 , 的值contentOffset
,contentSize
它们看起来很好。
PS:有时scrollViewDidEndScrollingAnimation:
在强制偏移后没有调用方法,但这不一定是问题。
编辑:实际上,当我使用手指将滚动视图超出阈值偏移并继续向左平移时,就会发生这种情况。在阈值点,平移停止,但下次我尝试滚动时,它不会平移。(即,我不会急于超越阈值)。
编辑:另一个可能的漏洞:我在强制新偏移量之前scrollEnabled
等于NO
,并且在给出设置新偏移量的命令之后,我将它设置回YES
. 我需要这样做,以便如果我尝试用 jerk 滚动滚动视图,它不会在尝试设置新偏移量时向左滚动,因为启用了分页。
编辑:可能是因为我在实际使用触摸滚动时设置scrollEnabled
为?NO
我稍后会启用它,但也许这是一些问题......
重要编辑:如果我长按滚动视图,然后尝试移动,滚动视图开始滚动!
编辑: 此代码在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]