J'essaye de déboguer un problème qui me bloque vraiment. Fondamentalement, j'ai une sous-classe UIView qui dessine un gradient à lui-même dans drawRect: basé sur les couleurs que je fournis dans la méthode init. Le problème se produit lorsque la vue se dessine à nouveau. Si j'appelle setNeedsDisplay sur la vue, ou si disons que la vue est supprimée à cause d'un avertissement de mémoire insuffisante et qu'elle est rajoutée plus tard (ce qui déclencherait aussi drawRect: again) alors l'arrière-plan de la vue est complètement vide. Je ne suis pas sûr de savoir pourquoi redessiner un dégradé provoquerait cela; Est-ce que quelqu'un sait ce qui pourrait mal se passer? Voici un extrait du code que j'ai en drawRect:Les dégradés de dessin sur un UIView ne fonctionnent pas sur les appels suivants à drawRect:
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
int startcolorNumComponents = CGColorGetNumberOfComponents(self.topColor.CGColor);
int endcolorNumComponents = CGColorGetNumberOfComponents(self.bottomColor.CGColor);
// get the array of floats for each of the gradient colors
const CGFloat *startComponents = CGColorGetComponents(self.topColor.CGColor);
const CGFloat *endComponents = CGColorGetComponents(self.bottomColor.CGColor);
CGFloat redStart = startComponents[0];
CGFloat greenStart = (startcolorNumComponents != 2)? startComponents[1] : startComponents[0];
CGFloat blueStart = (startcolorNumComponents != 2)? startComponents[2] : startComponents[0];
CGFloat startAlpha = (startcolorNumComponents != 2)? startComponents[3] : startComponents[1];
CGFloat redEnd = endComponents[0];
CGFloat greenEnd = (endcolorNumComponents != 2) ? endComponents[1] : endComponents[0];
CGFloat blueEnd = (endcolorNumComponents != 2) ? endComponents[2] : endComponents[0];
CGFloat endAlpha = (endcolorNumComponents != 2) ? endComponents[3] : endComponents[1];
CGFloat components[8] = { redStart, greenStart, blueStart, startAlpha, redEnd, greenEnd, blueEnd, endAlpha };
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGGradientRef glossGradient = CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations);
CGPoint gradientStart = CGPointMake(CGRectGetMidX(self.bounds), self.bounds.origin.x);
CGPoint gradientEnd = CGPointMake(CGRectGetMidX(self.bounds),self.bounds.size.height));
CGContextDrawLinearGradient(currentContext, glossGradient, gradientStart, gradientEnd, 0.0);
CGGradientRelease(glossGradient);
CGContextRestoreGState(currentContext);