2012-06-03 118 views
2

我一直在爲這個問題掙扎數週。無論如何,CALayer的可怕。它們造成很多滯後,使我的界面看起來更糟糕。CALayer性能差?

差不多我有我已經在效率刷爆了一個簡單的UITableView和所有的滯後性,當滾動來自3行代碼:

CALayer *imageLayer2 = [cell.imageView layer]; 
[imageLayer2 setMasksToBounds:YES]; 
[imageLayer2 setCornerRadius:10.0]; 

我試圖設置setMaskToBounds爲NO,但那麼沒有圓角應用於我的UIImageView。看起來這個問題在iPhones上出現了一些奇怪的原因,但是不幸的是現在只能找到解決方法。此代碼位於我的cellForRowAtIndexPath中,但僅在需要新單元時纔會執行,因此並不總是調用它。

無論如何,你推薦我做什麼,而不是使用CALayers來擺脫這種滯後?

謝謝!

+0

上面的代碼? – sergio

+0

你確定這是造成糟糕表現的代碼嗎?你有沒有評論和檢查? – pasawaya

+0

@sergio thecellForRowAtIndexPath –

回答

1

我認爲這裏的問題是因爲每次調用cellForRowAtIndex時都會這樣做。我會建議的是,將圖像與面罩和角半徑一起存儲,然後當您再次需要時,您會要求模型檢索圖像,而不是再次計算圖像。 cellForRowAtIndex是一個明智的選擇,你應該避免在其中進行昂貴的操作。

0

嗯,如果你願意與圖像本身搞亂,你可以把它圓矩形,然後用它,因爲它是 對於矩形圖像更新到圓矩形一個,看看這個答案 How to mask a square image into an image with round corners in the iPhone SDK?

+0

我甚至嘗試過這樣做,但仍然存在滯後性。有沒有其他方法? –

+0

做到這一點,但不要在cellforrow中做到這一點,在視圖中加載並緩存圖像,甚至將它們保存在磁盤上以備後用 –

1

我發現如果您使用UIImage的CGImageRef,它比直接使用UIImage快得多。

試試這個:

CALayer *imageLayer2.contents = (id)[cell.imageView image].CGImage; 
[imageLayer2 setMasksToBounds:YES]; 
[imageLayer2 setCornerRadius:10.0]; 

雖然我真的完全擺脫了ImageView的和公正的處理,從哪種方法你執行CALayers和UIImages(假設你不關心無障礙)