2012-03-05 172 views
0

我需要做一個項目,我將在屏幕上繪製一些圖形,其大約25個分離的條,我用UIView完成它,但不幸的是,並非所有的設備都可以處理這個工作,因爲有UIViews的一個25x25的矩形矩陣,它們在0.04秒內更新它的顏色和alpha,並且它真的需要大量的內存才能像這樣畫出來,有人可以幫助一個目的,怎麼能更快地完成內存管理,以及是否有可能控制其組件,如對象的Alpha或背景顏色。在此先感謝更快的圖形爲iPhone

+0

阿爾法:https://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/alpha BGCOLOR:HTTPS ://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/backgroundColor – 2012-03-05 11:53:30

回答

1

Go for OpenGL。它具有非常高效的2D繪圖機制。

3

我的理解是,你使用每個酒吧25個子視圖。您已經可以優化它並使每個條形成單個UIView。您可以製作一個UIView的自定義子類,我們將其稱爲BarView,並覆蓋其drawRect方法以繪製條的25個方格。

編輯

假設有一個包含25巴(的Bar型)的陣列bars。每個小節包含25個方塊(類型爲Square)的數組squares

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef *ctx = UIGraphicsGetCurrentContext(); 
    for (Bar *bar in self.bars) { 
     for (Square *square in bar.squares) { 
      CGContextSetFillColorWithColor(ctx, square.color.CGColor); 
      CGContextFillRect(ctx, square.frame); 
     } 
    } 
} 

BarSquare不繼承UIView,它們是簡單NSObject秒。

最後要注意的是,這段代碼僅僅是一個例子,有可能進一步提高性能。

+0

我用UIView完成了它,我的酒吧它是從UIView繼承的。 – Florik 2012-03-05 12:29:20

+1

是的,它是否包含子視圖?如果是的話,那麼你應該刪除它們並使用'drawrect'來代替欄的方格。如果您需要更多幫助,您應該解釋酒吧的外觀和功能。 – sch 2012-03-05 12:59:38

+0

酒吧是在一個子視圖上繪製的,我通過標記將它們分開,而對於cicle,我設置了顏色和alpha ...矩陣爲25x25,視圖上有625個子視圖...像這樣.. – Florik 2012-03-05 13:07:03

1

您可能想切換到this answer中建議的基於Core Animation的繪圖方法。這個想法是使用Core Graphics繪製儘可能少的東西。相反,您可以爲所有獨立動畫圖形元素和動畫圖層屬性創建圖層。

要繪製條,您可以創建一個圖層並設置它的backgroundColor和bounds/center屬性以動畫化它的大小和外觀。

+0

謝謝,已經試圖用CALayers來製作,但不幸的是它效果更糟......酒吧的動畫比他們應該更加精彩! – Florik 2012-03-05 12:27:19