Je suis sur le point de commencer à m'arracher les cheveux. J'essaye de créer un remplissage de gradient couvrant la région du rectangle avec les coins arrondis. Ceci est le code que j'ai dans mon drawRect:
:Quartz: impossible de créer un rectangle arrondi avec remplissage dégradé
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect);
CGFloat c = BUBBLE_INSET + BUBBLE_CORNER_RADIUS;
CGContextMoveToPoint(ctx, BUBBLE_INSET, c);
CGContextAddArcToPoint(ctx, BUBBLE_INSET, BUBBLE_INSET, c, BUBBLE_INSET, BUBBLE_CORNER_RADIUS);
CGContextAddLineToPoint(ctx, rect.size.width - c, BUBBLE_INSET);
CGContextAddArcToPoint(ctx, rect.size.width - BUBBLE_INSET, BUBBLE_INSET, rect.size.width - BUBBLE_INSET, c, BUBBLE_CORNER_RADIUS);
CGContextAddLineToPoint(ctx, rect.size.width - BUBBLE_INSET, rect.size.height - c);
CGContextAddArcToPoint(ctx, rect.size.width - BUBBLE_INSET, rect.size.height - BUBBLE_INSET, rect.size.width - c, rect.size.height - BUBBLE_INSET, BUBBLE_CORNER_RADIUS);
CGContextAddLineToPoint(ctx, c, rect.size.height - BUBBLE_INSET);
CGContextAddArcToPoint(ctx, BUBBLE_INSET, rect.size.height - BUBBLE_INSET, BUBBLE_INSET, rect.size.height - c, BUBBLE_CORNER_RADIUS);
CGContextClosePath(ctx);
CGContextClip(ctx);
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
NSArray *colors = [NSArray arrayWithObjects:color1, color2, nil];
CGGradientRef gradient = CGGradientCreateWithColors(space, (CFArrayRef)colors, NULL);
CGColorSpaceRelease(space);
CGPoint p1 = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint p2 = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextDrawLinearGradient(ctx, gradient, p1, p2, 0);
CGGradientRelease(gradient);
Ce code dessine un rectangle blanc vide. Chemin est construit correctement (j'ai essayé d'appeler CGContextFillPath()
et le résultat est joliment rempli de couleur unie), color1
et color2
les valeurs sont correctes (vu dans le débogueur). Quel est le problème avec ce code?
Etes-vous sûr que color1 et color2 sont définis dans RVB-Space. c'est-à-dire [[UIColor blackColor] CGColor] renvoie une couleur espacée monochrome. – vikingosegundo
Il s'est avéré que color1 et color2 sont de type UIColor, ce qui est totalement faux. Ajout de l'invocation 'CGColor' si nécessaire et les choses fonctionnent maintenant –
Cela peut être assez déroutant. – vikingosegundo