2010-02-14 5 views
3

J'utilise ce code dans ma sous-classe UIView pour dessiner un cercle avec un remplissage dégradé:CGContextSetShadow produit aucun résultat

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetShadow (context, CGSizeMake(4,4), 5); 
    CGContextBeginPath (context); 
    CGContextAddEllipseInRect(context, CGRectMake(self.bounds.origin.x, self.bounds.origin.y, 38, 38)); 
    CGContextClosePath (context); 
    CGContextClip (context); 
    CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMinX(self.bounds), CGRectGetMaxX(self.bounds)), CGPointMake(CGRectGetMaxX(self.bounds), CGRectGetMinY(self.bounds)), 0); 
} 

Le cercle et le gradient tirent bien, mais je ne vois pas d'ombre. Je ne suis pas sûr pourquoi cela ne fonctionne pas, parce que j'ai utilisé la même fonction CGContextSetShadow dans une sous-classe de vue différente et cela a bien fonctionné.

REMARQUE: Dans le code ci-dessus, "gradient" est un ivar qui a été défini précédemment. Un dessin de gradient ne compte pas comme remplissage;

Répondre

3

seuls les remplissages et les traits produisent des ombres. (Vous pouvez report this as a bug.)

Pour contourner ce problème, remplissage le chemin (avec du noir solide), puis éteignez l'ombre, puis tracer le dégradé.

+0

Voulez-vous dire allumer ou éteindre l'ombre? Je ne comprends pas vraiment le fil de la pensée. – indragie

+0

Éteindre. Remplissez-le, puis éteignez-le et dessinez le dégradé. –

Questions connexes