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!

questionAnswers(1)

yourAnswerToTheQuestion