我如何知道在iOS上绘制屏幕的时间?

时间:2016-03-23 02:05:05

标签: ios cocoa-touch

我想知道在iOS上绘制屏幕的时间。特别是,我想知道屏幕上是否有任何可见的变化。例如,这可以很方便地知道页面呈现的时间长度(假设用户没有与页面交互)。我希望能够在常规生产构建中捕获此信息,而不是在开发人员构建中。我希望这是一个适用于我的应用中大多数页面的通用解决方案,而不仅仅是特定页面。

例如,我有一个页面,1)异步查询API数据,2)在UITableView中显示数据,其中一些条目可能在屏幕外,然后3)异步下载每个可见的图像屏幕上的项目。我想在渲染UITableView时以及渲染所有图像时获得回调。可以通过查看最后一次调用回调的时间戳来确定呈现页面的总时间(同样,假设没有用户交互)。

在Android上,这很简单。您可以使用ViewTreeObserver.addPreDrawListener在绘制屏幕时进行回调。如果屏幕没有可见的变化,则不会调用回调。

在iOS上,看起来CADisplayLink可能会起到类似作用。但是,当我连接我的CADisplayLink时,无论屏幕上是否有明显的变化,它似乎都会被永远调用。

有没有办法知道什么时候在iOS中绘制的屏幕有可见的变化?

1 个答案:

答案 0 :(得分:0)

在iOS 9中,Apple无法访问应用程序外部屏幕上绘制的内容。之前,可以使用名为IOSurface的API来实现它,但Apple在iOS 9中将其关闭。(以防止应用程序相互窥探。)

因此,如果您正在谈论被吸引到屏幕上的任何事情,那么答案就是否定的。如果您正在寻找应用内的更改,则可能有办法实现。