2011-04-13 43 views
1

我有一個自定義的UITableViewCell從定製發現這裏的UITableViewCell教程爲藍本正是 - http://developer.apple.com/library/ios/#samplecode/AdvancedTableViewCells/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009111爲什麼的drawRect在定製大型滾動影像比的UIImageView慢的UITableViewCell

,並在這裏 - http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007318

一切使用呈現繪製3個字符串和1個圖像時,drawRect和滾動速度爲55 FPS。該圖像是通過繪製 -

[self.sampleImage drawInRect:CGRectMake(0, 0, 55, 55)]; 

奇怪的是,滾動速度降低至25 FPS,當我呈現相同的圖像,但在更大的區域

[self.sampleImage drawInRect:CGRectMake(0, 0, 320, 80)]; 

我在蘋果的drawRect中更大的圖像試驗示例代碼,足夠肯定幀速率下降到25 FPS。

問題在於當我繪製字符串並通過UIImageVew顯示圖像時,FPS回到55。

  • 如何大的圖像在一個UITableViewCell使用drawRect中,同時保持50 FPS的滾動速度如何界定呢?

  • UIImageView是否比繪製drawRect(對於UITableViewCell)圖像更快?

  • 有沒有GPU與CPU的力量?

回答

0

@darcwader它有很多的地方。我認爲所有例子都使用drawRect的原因是最初(設置單元格)開銷更大,但之後它更便宜以製作它們。但是,對於大圖像來說,繪製它們會花費更多的代價,並且如果您滾動瀏覽多個圖像,則不會實現使用drawRect的好處。

2

drawRect將使用核心圖形將圖像繪製到使用CPU的屏幕上。如果你使用UIImageView,它將使用GPU,因此速度更快。

解決方法是不使用drawRect。

如果您絕對需要使用drawRect,那麼您可能需要先繪製它,然後才能滾動到某個緩存位置/緩存繪圖並將該圖像用於UIImageView。

+0

有趣的,但爲什麼每個開發人員的文檔,包括蘋果自己的樣本推薦drawRect?只是爲了更小的圖像? – Sid 2011-04-14 21:49:33

+0

我想這取決於你正在繪製什麼。例如,如果你有一個帶有多個文本標籤的複雜單元格,它可以(在較老的硬件上?)在單個'-drawRect'內繪製比在其中具有多個'UILabel'的單元更快。 HTH。 – nielsbot 2013-08-27 18:10:55

相關問題