【问题标题】:Changes to UIScrollView contentOffset don't stick when decelerating减速时 UIScrollView contentOffset 的更改不会粘住
【发布时间】:2011-03-15 10:55:51
【问题描述】:

我查看了UIScrollView. Any thoughts on implementing "infinite" scroll/zoom?,但它并没有完全解决我的问题。不过,我很困惑,因为我猜其他人没有看到我的问题,所以可能与我的代码细节有关。 Allisone 提供的示例代码与我的类似,虽然我使用 scrollViewDidScroll 来监控 contentOffset 而不是自定义 KVO 方法。

当我的 UIScrollView 正在减速时,如果我在 UIScrollView 边界的左侧插入一个子视图并将 contentOffset 增加我插入的子视图的宽度,我对 contentOffset 的更改将被忽略;内容“跳跃”插入子视图的宽度,并且 contentOffset 值流在后续调用 scrollViewDidScroll 时继续其当前轨迹。虽然简单地跟踪,但没有问题。有什么我可能做错了吗?几乎就好像 bounds 或 contentOffset 对于减速事件是粘性的。

用例:UIScrollView 有非常大的虚拟内容,动态分页进出,当用户平滑滚动 UIScrollView 中的内容时(例如,向左滚动),应在最左侧插入附加内容在不破坏当前正在进行的平滑滚动的情况下滚动视图。正如我所说,如果禁用减速或者我依靠拖动而不是轻弹,这会很好。

起初我希望问题是由于将标注中的 UIScrollView 的内容从 callout 更改为 scrollViewDidScroll 引起的,所以我通过延迟 performSelector 进行了仔细检查,但问题仍然存在。

谢谢, 凯文

【问题讨论】:

  • 您找到解决方案了吗?

标签: iphone ipad scroll uiscrollview


【解决方案1】:

尽管不完全是您的想法,但使用 setContentOffset:animated 将获得所需的结果(将内容偏移更改为正确的坐标),尽管它会被动画化。

【讨论】:

  • 只需设置动画:NO,不会有任何动画。
【解决方案2】:

面临同样的问题。看起来像奇怪的 UIScrollView 错误。我在 Apple 的 StreetScroller 示例的基础上修复了它。 InfiniteScrollView 继承自 UIScrollView 并在那里工作得很好。但是,如果您想创建在自身内部使用 UIScrollView 的自定义类,您可以将此 UIScrollView 子类化并在需要重新定位内容时调用委托,如下所示:

tScrollView : UIScrollView 在 tScrollView.m 中: - (void)recenterIfNecessary { if (_tDelegate && [_tDelegate respondsToSelector:@selector(offsetForRecenterScrollView:)]) self.contentOffset = [_tDelegate offsetForRecenterScrollView:self]; } - (void)layoutSubviews { [超级布局子视图]; [自我中心如果必要]; }

在委托中实现offsetForRecenterScrollView:并返回新的CGPoint以设置在scrollView.contentOffset中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多