【问题标题】:UIScrollView freezes after using SetContentOffset or scrollRectToVisibleUIScrollView 在使用 SetContentOffset 或 scrollRectToVisible 后冻结
【发布时间】:2011-07-23 18:35:02
【问题描述】:

我有一个启用了分页的 UIScrollView,我希望能够跳到下一行的页面,而不是在每个页面中滑动。我尝试同时使用 setContentOffset 和 scrollRectToVisible。他们都将视图滚动到正确的点,但是在滚动动画后,滚动视图会冻结并且对任何触摸都没有响应。我尝试将其设置为第一响应者,但没有任何改变。我在滚动视图之外有一个按钮,在 setContentOffset 之后它仍然可以正常工作。滚动视图内部也有按钮,滚动视图不仅不会响应拖动的触摸,而且按钮也不会识别触摸。

        [mainScroll setContentOffset:CGPointMake(mainScroll.frame.size.width*4, 0.0) animated:YES];

tldr;我可以很好地滚动视图,浏览所有页面,但是当我尝试调用 setContentOffset 或 scrollRectToVisible 时,我会在移动后“冻结”。

【问题讨论】:

  • 没有日志/输出。应用程序不会崩溃。当调用 setContentOffset 时,它似乎只是将 UIScrollView 变成了只能由 setContentOffset 进一步控制的东西。它可以响应 setContentOffset 但不会响应 UIScrollView 上的触摸、拖动或与其中的项目交互。有趣的注意事项:如果我调用 [scrollView flashScrollIndicators],则在调用 setContentOffset 之后;什么都没有显示。

标签: iphone cocoa-touch uikit uiscrollview


【解决方案1】:

我明白了,愚蠢的错误。

在我的 scrollViewDidScroll 中我有:

scrollView.userInteractionEnabled=NO;

在我的 scrollViewDidEndDecelerating

scrollView.userInteractionEnabled=YES;

在scrollViewDidEndDragging:willDecelerate

if(!decelerate){scrollView.userInteractionEnabled=YES;}

我这样做是为了防止在页面转换过程中按下按钮和任何随机的事情。但是当 setContentOffset 被调用时,它只会导致 scrollViewDidScroll 被调用,而其他两个都不会被调用,所以 UserInteraction 从未被设置回 Enabled,但只有在使用 setContentOffset 时才会被调用。

简单的修复。

【讨论】:

猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多