我有一個UI,其中NSCollectionViewItem
的視圖的內容是通過CALayers以編程方式繪製的。在調整大小時,我使用CAConstraintLayoutManager
來保持子圖層的一致性,但這樣做時我的性能很差。似乎調整窗口的大小會導致調整兩個CATextLayer
的大小以適應根層的寬度,並且重定位一個CATextLayer
以使其保持右對齊,這導致應用程序花費大部分時間執行CGSScanConvolveAndIntegrateRGB
函數(我用過Time Profiler工具)。CALayer Live Resize性能不佳
最「昂貴」的層(即使它是唯一顯示的導致最口吃的那一層)是一個包裝多行CATextLayer
。我絕對不知道如何獲得更好的性能(我曾嘗試不使用CAConstraintLayoutManager
並使用層對齊,但我得到的是相同的結果)。有沒有人有這個問題?有沒有辦法解決它?
PS:我已經在CATransaction
設置YES(是)kCATransactionDisableActions
子類的- (void)layoutSublayersOfLayer:(CALayer *)layer
執行過程中的佈局管理器和殘疾人所有的動畫,但它似乎並不幫忙。
編輯:我已經禁用字體平滑的文字圖層和性能提高一點點(很少),但它在_ZL9view_drawP7_CAViewdPK11CVTimeStampb(這恐怕是被通過的一個線程調用花費的時間一個可怕的量ATI Radeon驅動程序,我想)。
事實證明,我正在調整所有視圖的大小,而不僅僅是在ScrollView的可見矩形內部可見的大小。我正在實現一種只調整可見視圖的方法,因爲據我所知,沒有內置的方法可以做到這一點,它不是默認行爲。去搞清楚。 – juandemarco