【问题标题】:iOS : WHO'S in charge of refreshing UI/Screen while UITableView's scrolling?iOS:UITableView 滚动时谁负责刷新 UI/屏幕?
【发布时间】:2014-11-13 12:50:32
【问题描述】:

我正在寻找将 FPS 计算为 what I said here 的方法,认为当 UITableView 滚动时,它的 drawRect: 将被逐帧调用。但它没有。

UITableView 的drawRect: 只会被调用一次,不管我是快速上下拖拽还是放按钮。 UITableView 的超级视图和单元格也是如此。所有 UIViews 的 drawRect:s 只被调用一次。

鉴于drawRect: 只调用了一次,谁负责在 UITableView 滚动时刷新 UI/Screen?

更新 1

我知道 UITableView 的委托和数据源负责布局 要显示的单元格。但是如果 tableView 只是稍微滚动呢?虽然它的 没有调用委托和数据源,屏幕的内容仍然 改变了。在这种情况下,谁来负责 iPhone 上的 UI 刷新 屏幕? scrollView 滚动 -> UIKit -> GPU -> LCD 屏幕?

【问题讨论】:

  • 您可以使用滚动视图委托方法,当您向上或向下滚动时会调用它们。基于拉动刷新作品:)
  • 表格视图上方有一个uiscrollview(某处)。不太确定你会如何使用它,但该类会在滚动时发送消息。
  • @AnnaDickinson UITableViewUIScrollView 的子类。
  • 哦,对了。因此,您可以在自定义 UITableView 类中设置委托并覆盖 -scrollViewDidScroll 方法。
  • @SibaPrasadHota 所以你的意思是我可以通过观察scrollViewDidScroll来计算FPS:?

标签: ios iphone uitableview uikit drawrect


【解决方案1】:

这就是UITableViewdataSourcedelegate 属性的用途。它们允许您定义负责设置 UI 和处理用户交互的人员。

【讨论】:

  • 感谢您的回复。当然我知道 UITableView 的委托和数据源负责布局单元格的显示。但是如果 tableView 只是稍微滚动呢?虽然没有调用它的委托和数据源,但屏幕的内容仍然发生了变化。在这种情况下,谁来负责 iPhone 屏幕上的 UI 刷新? scrollView 滚动 -> UIKit -> GPU -> LCD 屏幕?
  • 所有 iOS UI 最终都会分解为 OpenGL ES 调用/对象。 UIViews 有其对应的CGLayers,它们以某种方式在 OES 中呈现。当您更改视图的变换(通过平移/移动、旋转、缩放、倾斜等)时,您也会更新其 OES 表示。 OES 将在每​​个绘制循环上调用其对象的绘图方法,我认为这是您正在寻找的,但它已从您那里抽象出来。 drawRect: 方法仅在调用 setNeedsDisplay 时才被调用,为了性能而将其最小化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2021-06-05
  • 2015-03-28
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多