我已經重寫了的UIView做一些自定義繪製:iPhone - 優化的drawRect
// ========================================================================================
- (void) drawRect:(CGRect)rect {
float alphaStep = (kMaxAlpha - kMinAlpha)/(self.nbLines - 1);
float alphaValue = kMaxAlpha;
float lineToDrawY = self.headLineYPos;
float lineWidth = kScanLineMaxWidth;
float lineWidthStep = (kScanLineMaxWidth - kScanLineMinWidth)/(self.nbLines - 1);
CGContextRef context = UIGraphicsGetCurrentContext();
for (int i=1; i<=self.nbLines; i++) {
CGContextBeginPath(context);
CGContextSetLineWidth(context, lineWidth);
CGContextSetStrokeColorWithColor(context, [self.scanColor colorWithAlphaComponent:alphaValue].CGColor);
CGContextMoveToPoint(context, 0, lineToDrawY);
CGContextAddLineToPoint(context, [self bounds].size.width, lineToDrawY);
CGContextStrokePath(context);
lineToDrawY -= kOneLineJumpDistance;
lineWidth = MAX(0.5, lineWidth - lineWidthStep);
alphaValue = MAX(0, alphaValue - alphaStep);
}
}
self.nbLines可能是30-40左右,可能是100
但繪製的這部分非常耗時,並且我無法每2或3毫秒進行屏幕更新。這需要將屏幕動畫的總時間保持在一秒以內(我每隔xxx秒將頭部線移動xxx像素,但增加太多會導致閃爍)。
我該如何優化?
你期待有多少'nbLines'? – FreeAsInBeer 2011-04-09 13:11:44
@FreeAsInBeer:大約30-40,可能是100 – Oliver 2011-04-09 13:19:03
它需要花費多少毫秒?更新每2或3毫秒將是一個難以達到的目標。這是333 - 500 fps,我很肯定iPhone不能(也不想)擊中。 – FreeAsInBeer 2011-04-09 13:24:18