2013-06-20 138 views
1

我有一個自定義的UITableViewCell子類,它顯示圖像和文字。 下載圖像時,在顯示錶格視圖單元格時可隨時使用文本。在UIView中使用CoreGraphics繪製圖像並在其上繪製文本drawRect

various places,我讀到最好是隻需要一個視圖並且相比於具有多個子視圖(在這種情況下,一個UIImageView視圖和2個的UILabel視圖)

在視圖的drawRect方法來提高性能借鑑的東西

我不想繪製自定義表格視圖單元格的drawRect因爲

  1. 圖像的圖像可能會無法使用在第一時間其所謂,
  2. 我不想畫的整體形象每次有人打電話給drawRect。

視圖中的圖像只能在有人要求顯示圖像時完成(例如網絡操作完成並且圖像可用於呈現時)。然而,該文本是在 - drawRect方法中繪製的。

的問題:

  1. 我不能顯示在屏幕上的圖像,一旦它被下載。 我使用的代碼是─目前

    - (void)drawImageInView 
    { 
    //.. completion block after downloading from network 
        if (image) { // Image downloaded from the network 
        UIGraphicsBeginImageContext(rect.size); 
        CGContextRef context = UIGraphicsGetCurrentContext(); 
        CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor); 
        CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor); 
        CGContextSetLineWidth(context, 1.0); 
        CGContextSetTextDrawingMode(context, kCGTextFill); 
    
        CGPoint posOnScreen = self.center; 
        CGContextDrawImage(context, CGRectMake(posOnScreen.x - image.size.width/2, 
                 posOnScreen.y - image.size.height/2, 
                 image.size.width, 
                 image.size.height), 
                 image .CGImage); 
        UIGraphicsEndImageContext(); 
        } 
    } 
    

我也試過:

 UIGraphicsBeginImageContext(rect.size); 
     [image drawInRect:rect]; 
     UIGraphicsEndImageContext(); 

無濟於事。

  1. 如何確保文字在繪製時位於圖像上方。應該在UIGraphicsEndImageContext();之後撥打[self setNeedsDisplay]以達到 確保文本呈現在圖像之上?

回答

0

由於沒有UILabel對象的開銷,繪圖文本會使應用程序更快,但UIImageView高度優化,您不可能比此類更快地繪製圖像。因此,我強烈建議您使用UIImageView來繪製圖像。不要陷入優化陷阱:只有當你看到你的應用程序不能在最大值時才進行優化。

下載圖片後,只需將imageView的圖片屬性設置爲您的圖片,即可完成。

+0

使用UIImageView的問題是它的-drawRect方法沒有被調用。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImageView_Class/Reference/Reference.html所以我將不得不在圖像視圖頂部使用幾個標籤。我同意不優化,如果不需要,但我確實看到一些中斷滾動,這就是爲什麼我試圖優化它。 – Devang

+0

我不明白這是一個問題。在你的自定義單元格中,你可以使用imageView作爲獨立的,然後重寫-drawRect(單元格)來繪製文本。 –

+0

問題(至少從我的實驗中)是imageView位於超級視圖的頂部,因此在顯示圖像視圖時甚至繪製文本時,超級視圖上所做的任何操作都會隱藏起來。 – Devang

0

請注意,您鏈接到的stackoverflow頁面已近四年,並且該問題鏈接到幾乎是五年五年的文章。當這些文章是在2008年寫的,目前的設備是一個iPhone 3G,這是慢得多(CPU和GPU),並且比現有設備在2013年少得多的RAM。因此,您閱讀的建議並不一定與今天有關。

無論如何,除非您已經測量過性能(大概是使用Time Profiler工具)並且發現問題,否則不要擔心性能。只需以最簡單,最可維護的方式實現您的界面即可。然後,如果你發現一個問題,嘗試一些更復雜的修復它。

因此:只需使用UIImageView即可顯示您的圖片,並使用UILabel即可顯示您的文字。然後測試它是否太慢。

如果您的測試顯示它太慢了,請將其分析。如果您無法弄清楚如何分析它,或者如何解析分析器輸出,或者如何解決問題,那麼請回過頭來發佈一個問題,幷包含分析器輸出。