2016-03-23 42 views
0

我想知道什麼時候在iOS上繪製屏幕。特別是,我想知道是否有任何可見的變化正在屏幕上繪製。例如,這可以很方便地知道頁面呈現多長時間(假設用戶不與頁面交互)。我希望能夠在常規生產版本中捕獲這些信息,而不是在開發者版本中捕獲。我希望這是一個通用的解決方案,適用於我應用中的大多數任何頁面,而不僅僅是特定的頁面。我如何知道在iOS上繪製屏幕的時間?

例如,我有一個頁面1)異步查詢數據的API,2)在UITableView中顯示該數據,其中一些條目可能離屏,然後3)異步下載每個圖像屏幕上的可見項目。我想要在渲染UITableView和渲染所有圖像時獲得回調。可以通過查看最後一次調用回調的時間戳來確定呈現頁面的總時間(同樣,假設沒有用戶交互)。

在Android上,這很簡單。每當屏幕被繪製時,您都可以使用ViewTreeObserver.addPreDrawListener來獲取回調。如果屏幕沒有可見的變化,則不會調用回調。

在iOS上,它看起來像CADisplayLink可能會用於類似的目的。但是,當我連接我的CADisplayLink時,它似乎被永遠調用,無論屏幕上是否有可見的變化。

有沒有辦法知道什麼時候在iOS中繪製屏幕有可見的變化?

+0

與下載材料異步填充表視圖的業務是非常普遍的,很好的解決(在這裏很好地解釋)。我不太明白你需要額外的信息。 「呈現頁面的總時間」這個概念有點沒有意義,因爲屏幕外單元不存在並且不被渲染。 – matt

+0

我想創建一個報告,顯示用戶在真實世界中加載頁面需要多長時間的第50,90和95百分位數,以便我可以獲取有助於優化應用頁面加載性能的數據。 – emmby

+0

但是,這不是您需要量化的_drawing_,而是_downloading_。這是很容易完成的事情。 - 請等下一次,問你最想知道答案的問題。你會得到更好的幫助,並浪費更少的時間/帶寬。 – matt

回答

0

在iOS 9中,Apple無法訪問在應用程序外部繪製到屏幕上的內容。之前,有可能使用名爲IOSurface的API來執行此操作,但Apple在iOS 9中將其關閉。(爲了防止應用程序相互窺探)。

因此,如果您正在談論的任何東西被吸引屏幕上的答案是否定的。如果你正在尋找你的應用程序的變化,可能有辦法做到這一點。

+0

好問題。我只是在應用程序內尋找對屏幕所做的更改。謝謝! – emmby