2010-12-08 63 views
1

我在我的tableView中有拉伸圖像的問題。直到今天我用了320px寬度的靜態backgroundimages。stretchableImageWithLeftCap: - > drawInRect - >很慢?

但是,因爲我也想支持風景,我以爲我切換到可伸縮圖像,而不是使用單獨的PNG文件。

我注意到的第一件事是,滾動性能非常糟糕。 我沒有改變任何東西。

之後,我開始測量一些東西,並從可伸縮圖像旁邊的繪圖例程中刪除了所有東西。

與使用與backroundRect尺寸相同的非拉伸圖像相比,「drawContentView」方法需要10倍的時間。 隨着拉伸滯後很容易看到。沒有它就像魅力一樣咆哮。

static UIImage *greyBackground = nil; 

+ (void)initialize 
{ 
    greyBackground = [[[UIImage imageNamed:@"back_gray.png"]stretchableImageWithLeftCapWidth:65.0 topCapHeight:0.0]retain]; 
} 


- (void)drawContentView:(CGRect)r { 
    CGRect backgroundRect = contentView.bounds; 

    [greyBackground drawInRect:backgroundRect]; 
} 

這是真的那麼糟糕的表現,還是這裏出了什麼問題? 在iPhone 4上測試,所以應該足夠強大。 : -/

我已經考慮過緩存正確大小的圖像,而不是可拉伸的圖像,並在屏幕旋轉後使用新大小重新創建它。

但我知道很多應用程序使用單元格背景圖像和不同的單元格高度(例如Twitter a.k.a. Tweetie)並且仍然快速地滾動。

所以,它應該通常更好,或者是stretchableImageWithLeftCapWidth我最好避免?

+0

我對自定義單元格背景不是很熟悉,但是需要手動繪圖嗎?在UIView中沒有backgroundImage屬性嗎? 另外,緩存聽起來非常好,我會嘗試,如果沒有其他方式比使用自定義繪圖功能。 – 2010-12-08 20:56:46

回答

4

我找到了一個解決方案來解決這個問題,但仍然無法相信這應該是stretchableImageWithLeftCap的正常行爲:......

我切我backgroundPicture 3個部分了。 - leftCap - middlePart(1像素寬) - rightCap

左,右帽繪製drawAtPoint,middlePart IST與drawAsPatternInRect繪製。 繪製這3個緩存圖像或多或少像我原來的fullsize backgroundImage一樣快。

但我一直認爲stretchableImageWithLeftCap會做同樣的事情:繪製2個Caps和1px之間的模式。 不知道爲什麼它對我來說太慢了。