iOS 系統在輸入延遲最小化方面可謂得心應手,但是不管你的應用有多快,延遲在某種程度上還是有。這其中的一部分原因是與電容式觸摸傳感器掃描輸入的頻率相關,而這個頻率通常與屏幕刷新的頻率相同,每一次掃描間隔的時間大約是 16.7 毫秒。像 iPad Air 2 和即將上市的 iPad Pro,它們掃描指紋的頻率是 120Hz,時間間隔也隨之減少到 8.3 毫秒。
在軟件方面有 iOS 觸摸和圖形流線圖的步驟和程序,蘋果在 iOS 9 中就進行瞭改善,減少觸摸延遲。
上圖是 iOS 觸摸和圖形流線圖的可視化表示形式。你可以看到,通常情況下一般應用都會有4個幀的延遲。在蘋果公司對延遲的定義中,屏幕幀也包括在內,因此我們就按他們的定義標準來進行討論吧。
在這種理論情況下,隻有當應用的更新狀態恰好是一幀才會出現這種情況。那麼你可能認為,如果應用更新狀態的時間減少,支持 Core Animation 開始將應用視圖轉化成 GPU 指令,以便經過 GPU 完成渲染,這樣輸入延遲就會減少,其實並非如此。過去iOS都不是這樣。不管應用優化得再怎麼好,Core Animation 隻會在下一屏幕幀開始的時候開始進行轉化。這時因為一款應用在一幀中可以多次更新狀態,而這些更新則是成批處理,隻在屏幕上渲染一次。
在 iOS 9 中,蘋果撤銷瞭對 Core Animation 在下一幀開始的時候開始工作的要求。因此經過優化的應用將能夠對更新狀態產生更多影響,讓 Core Animation 發出 GPU 指令,在一個屏幕幀的時間跨度中畫下一幀。這樣觸摸延遲就從此前的四幀減少為三幀,而一些視圖比較復雜,對 Core Animation 和 GPU 渲染的要求多於一幀的應用來說,其觸摸延遲就從五幀減少為四幀。
蘋果還對觸摸輸入水平進行完善。如上所述,iPad Air 2 和 iPad Pro 掃描指紋的頻率是 120Hz,它能夠通過讓應用在一幀的中間開始進行工作,從而將延遲減少瞭半幀。除瞭減少延遲,開發者還可以利用額外的觸摸輸入信息來提高應用響應用戶輸入的準確度。
比如繪畫應用現在可以更準確地沿著用戶手指滑過的地方將線條勾勒出來。蘋果將這些額外的觸摸稱為合並觸摸,開發者需要在應用中增加代碼方能支持。但是在輸入頻率為 120Hz 的設備上應用更新將會自動在每一幀的中間開始。
iOS 9 最後一個用於減少輸入延遲的方法就是預測觸摸。開發者可以利用信息來預測用戶的手指將如何在設備上移動,利用這些信息他們可以提前更新視圖,一旦接收到關於用戶手指移動的準確信息之後,撤銷掉預測的變化,將真實變化體現出來,並根據用戶新的移動信息來繼續做出預測。
未來預測觸摸將能夠再將輸入延遲減小一幀,加上在輸入流水線中減少的一幀,未來大部分設備上的輸入延遲就能夠低至 2 幀,而像 iPad Air 2 這樣的設備上則能減少到 1.5 幀,這和 iOS 8 中的四幀延遲相比,降低的幅度確實很大。