UIScrollView在一个方向被禁用 - iOS

时间:2013-05-23 12:41:50

标签: ios uiscrollview scroll

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

强制偏移后,'有时'向与初始滚动方向相反的方向滚动被阻挡。说,我用手指从左到右滚动,并强制它偏移,然后我不能再从右向左滚动。

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

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

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]

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

而不是使用setContentOffset:animated:

您应该尝试使用scrollRectToVisible:animated: