我正在用NSTimer每隔0.1秒從網格中繪製單元格。 大小約爲96x64 => 6144個細胞/圖像。 如果我正在繪製圖像而不是(例如)綠色矩形,它會慢4倍!改善drawRect的性能:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
CGContextSetRGBFillColor(context, 0, 0, 0, 1);
CGContextFillRect(context, CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height));
int cellSize = self.bounds.size.width/WIDTH;
double xOffset = 0;
for (int i = 0; i < WIDTH;i++)
{
for (int j = 0; j < HEIGHT;j++)
{
NSNumber *currentCell = [self.state.board objectAtIndex:(i*HEIGHT)+j];
if (currentCell.intValue == 1)
{
[image1 drawAtPoint:CGPointMake(xOffset + (cellSize * i),cellSize * j)];
}
else if (currentCell.intValue == 0){
[image2 drawAtPoint:CGPointMake(xOffset + (cellSize * i),cellSize * j)];
}
}
}
UIGraphicsPopContext();
}
任何想法如何使這更快,如果我想在每個矩形中繪製PNG或JPG格式? 圖像已經縮放到合適的尺寸。
圖像是否實際調整了圖像文件大小,還是隻是在內存中縮放? – 2013-03-09 16:10:48
它們現在只在內存中縮放。我試圖縮放沒有任何結果的文件(很驚訝)!變化是從64×64像素到10×10像素... – Shamino 2013-03-09 16:38:03
有很多方法可以改善代碼的性能,例如,將'CGPointMake'中的乘法轉換爲加法,使'self.levelState.board'成爲C數組而不是'NSArray'。但是,這裏的瓶頸並不是檢查重新粉刷的區域,而是每0.1秒鐘重新繪製就顯得有點奇怪。只有遊戲需要重繪,這就是爲什麼我們有OpenGL ... – Sulthan 2013-03-09 17:02:23