簡體   English   中英

核心動畫和視圖旋轉效果不好:如何改進?

[英]Bad performance with core animation and view rotations: How to improve?

當進入主屏幕自定義模式時,通過觸摸圖標幾秒鍾,我可以旋轉12個視圖,這些視圖幾乎類似於主屏幕中的圖標。

我使用3D轉換代碼進行旋轉。 它們各自的持續時間僅為0.02秒,並且旋轉角度和方向在進行加速度測量時會永久更改。

這些視圖中的5個很好,但是12個的性能很差。 這是旋轉代碼:

CATransform3D rotatedTransform = CATransform3DRotate(CATransform3DIdentity, degrees * M_PI / 180.0, 0.0f, 0.0f, 1.0f);
self.layer.transform = rotatedTransform;

周圍包裹着一些核心動畫。 但是我在這里看到了CPU的浪費,因為我沒有做任何3D的工作。 我真的只旋轉2D,僅此而已。 它們是簡單的UIImageViews,但是是一個自定義類,該類自己進行旋轉動畫。

我聽說有一些“仿射”變換適用於2D空間。 在這種情況下,您是否建議將其更改為2D?

我是否必須更改圖層或視圖的變換? 哪個更快?

  1. 鯊魚吧。 您必須知道繼續緩慢到底是什么。

  2. 嘗試將更新間隔從0.02s增加到0.1s。 可以接受嗎?

  3. 如果所有圖像都一起旋轉,請在超sublayerTransform上使用sublayerTransform ,而不要分別變換每個圖像

  4. 嘗試不使用動畫,只是為了確認您的回調是否按預期工作(setDisableActions:在CATransaction上)。 關閉時,您是否看到了與在Shark中變慢一樣的東西?

  5. 如果在滾動視圖中執行此操作,則可能會有其他問題。 您需要照顧屏幕上正在發生的事情,等等。

  6. 3d變換的速度與核心動畫AFAIK中的仿射變換的速度相同。 基本的sin / cos東西不會減慢應用程序的速度

有關您要達到的實際效果的更多信息,將確實有助於提高性能。

圖像在屏幕上有多大?

我的建議是使用OpenGL ES。


盡管Core Animation比“ UITransformations”要靈活一些,但是您面臨的問題是一個經典的問題: 您正在嘗試創建基於幀到幀的動作,其中包含許多“虛擬”精靈。 那不是UIKit的用途 尤其是您要嘗試制作的動畫。 旋轉需要三角法才能計算像素插值。 那是相當昂貴的程序。

除非對動畫的強度,同時動畫的對象數以及重新計算新變換的頻率有明確的限制,否則我目前唯一的建議是OpenGL ES

到目前為止,我對iPhone的體驗非常相似 每次我們充實該應用程序時,當前平台都無法處理它。 我們最終使用了OpenGL ES,值得學習。 表現令人難以置信

對於“壞消息”,我們深表歉意,但我強烈建議您不要將UIKit和Core Animation用於基於框架的應用程序

CALayer旋轉是硬件加速的,2D和3D變換非常相似,無需重繪,無需進入opengl,無需緩存。

Shark會有所幫助,但您需要知道所要查找的內容,所要查找的內容不是提高當前代碼的性能,而是徹底刪除代碼。

聽起來您經常要遍歷自己的代碼,以更改每個圖層的角度。 讓CA來工作,您會贏。

因此,此處的策略是找到一種方法,讓CA來完成工作,並且每秒回電少於50次。

一個包含每個圖層幾個CAPropertyAnimationCAAnimationGroup怎么樣,並且一次設置一秒鍾的動畫呢?

一旦將其交給CA,CA就會在其自己的線程中對其進行回放。

聽起來就像您不斷重繪視圖。 我確定有一種方法可以禁用此功能,並且只能在動畫結束時重繪。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM