Otimize CGContextDrawRadialGradient no drawRect:
No meu aplicativo para iPad, eu tenho um UITableView que aloca / cria uma subclasse de UIView toda vez que uma nova célula é selecionada. Eu anuleidrawRect:
neste UIView para desenhar um gradiente radial e funciona bem, mas o desempenho está sofrendo - quando uma célula é tocada, o UIView leva substancialmente mais tempo para desenhar um gradiente programaticamente em oposição a usar um .png para o fundo. Existe alguma maneira de "cache" meudrawRect:
método ou o gradiente que gera para melhorar o desempenho? Eu prefiro usardrawRect:
em vez de um. Meu método é assim:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
size_t gradLocationsNum = 2;
CGFloat gradLocations[2] = {0.0f, 1.0f};
CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.5f};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);
CGColorSpaceRelease(colorSpace);
CGPoint gradCenter = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;
CGContextDrawRadialGradient (context, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
}
Obrigado!