【发布时间】:2013-05-23 12:41:50
【问题描述】:
我有一个没有垂直滚动的 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]
【问题讨论】:
-
等等,你是说如果你在一个方向上平移,你以编程方式强制 contentOffset,那么你不能继续平移?如果您抬起手指然后再次开始平移会怎样?这行得通吗?
-
不,没有。我抬起手指并尝试平移,旋转设备并尝试平移,但没有任何效果。
-
实际上,当我用手指将滚动视图超出阈值偏移量并继续向左平移时,就会发生这种情况。在阈值点,平移停止,但下次我尝试滚动时,它不会平移。 (即,我不会急于超过阈值)。
-
如果您发布一些代码,我们可能会很容易地为您解决这个问题。
-
我已经添加了相关的代码...
标签: ios uiscrollview scroll