目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?

Posted

技术标签:

【中文标题】目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?【英文标题】:objective c. ScrollView: how to force it redraw visible part each time user scrolls? 【发布时间】:2011-04-02 18:10:19 【问题描述】:

我在滚动视图中有自己的动态变化视图。

由于我的视野很大,我通常只重绘它的可见部分。

但是当我向上或向下滚动时,不会调用 drawRect 方法。

我猜滚动视图有一个缓冲区可以快速响应用户操作,但我不知道它是如何工作的确切机制。


更新

感谢 Wienke,我有一个解决方案:实现 UIScrollViewDelegate。

我已经实现了 scrollViewDidScroll 方法:

-(void) scrollViewDidScroll:(UIScrollView *)sender 
    CGRect visibleRect;
    visibleRect.origin = [scrollView contentOffset];
    visibleRect.size = [scrollView bounds].size;
    [textField setNeedsDisplayInRect:visibleRect];

所以每次用户滚动一点,这个方法都会重绘整个可见部分。不好=(

我怎样才能只重绘...让我称之为“滚动后出现的新区域”。我想它要快得多......

感谢您的关注。

【问题讨论】:

这就是“setNeedsDisplayInRect”的“InRect”部分的用途。您的“visibleRect”变量应该是滚动视图内容视图的边界。 哇...我确信“InRect”正是将传递给drawRect的矩形:方法...。规则#1:永远不要确定-总是检查=)再次感谢 当您使用它时,请查看 Apple 的 View Programming Guide 中的“View Geometry”。您可以将现在发现的内容应用到许多其他情况。 【参考方案1】:

您是否尝试过分配滚动视图委托? UIScrollViewDelegate 协议包括诸如 scrollViewDidEndDragging 之类的方法,您可以在这些方法上重绘。

【讨论】:

我想这会有所帮助,但我正在寻找一种方法来清理滚动视图的缓冲区。 是的!谢谢..您向我展示了正确的挖掘方向=)我使用了 scrollViewDidScroll - 它对我的问题更好。

以上是关于目标 C. ScrollView:每次用户滚动时如何强制它重绘可见部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何让scrollView每次滚动指定的距离,求大神帮忙

如何使用 scrollView 修复背景图像和使用 edittext 修复 textviews

滚动总是从 ScrollView 的顶部开始?

如何使 scrollView 滚动 ImageView 直到中心?

android 实现多textview的滚动

如何滚动到scrollview内recyclerview中的特定位置?