3

我有一个没有垂直滚动的 UIScrollView,并且我在其上强制一个特定的偏移量(只有 x),以防偏移量试图变得小于该特定偏移量。我使用setContentOffset:animated:函数,animated参数为YES. 偏移被正确强制。

在我强制偏移后,“有时”在与初始滚动方向相反的方向上滚动会被阻止。说,我用手指从左到右滚动,并强制它偏移一些,然后我不能再从右到左滚动了。

但问题是,如果我在屏幕上进行任何点击,滚动就会开始发生。我无法平移,但如果我点击屏幕或点击任何按钮,滚动就会开始工作。如果我尝试在之后以编程方式调用按钮按下方法,例如强制偏移 5 秒,那么它不起作用。看来我需要以某种方式触摸屏幕..

我检查了 , 的值contentOffsetcontentSize它们看起来很好。

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]

4

3 回答 3

1

而不是使用setContentOffset:animated:

你应该尝试使用scrollRectToVisible:animated:

于 2013-05-31T23:22:12.123 回答
1

您是否尝试过使用setUserInteractionEnabled:NOYES停止/允许用户与 UIScrollView 交互而不是使用该scrollEnabled属性?

于 2013-05-31T07:13:35.423 回答
1

我继承了 UIScrollView 并覆盖了该方法touchesShouldBegin:withEvent:inContentView:。在该方法中,当我看到视图卡住时,我返回NO那个特定的时刻,以便滚动视图接收所有触摸,而不是将它们传递给任何其他 contentView。这解决了问题。

编辑:这实际上并不能解决问题。我只想在尝试滚动滚动视图时禁止触摸 contentView,而不是在尝试点击 contentView 等其他事件时。但是在我发布的解决方案中,所有触摸都将保留在滚动视图中。我们有类似的touchMoved:方法吗?

于 2013-05-31T08:17:29.970 回答