2010-02-14 4 views
3

Я не буду использовать этот код в моем UIView подкласс, чтобы нарисовать круг с градиентной заливкой:CGContextSetShadow производит никаких результатов

- (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); 
} 

Круг и градиент рисовать хорошо, но я не вижу никакой тени. Я не уверен, почему он не работает, потому что я использовал ту же функцию CGContextSetShadow в другом подклассе вида, и он работал нормально.

ПРИМЕЧАНИЕ: В приведенном выше коде «градиент» представляет собой ivar, который был определен ранее.

ответ

3

Градиентная ничья не считается заполнением; только заливки и штрихи получают тени. (Вы можете report this as a bug.)

В качестве временного решения заполнения путь (с твердым черным), а затем выключить тень, а затем нарисуйте градиент.

+0

Вы имели в виду включение или выключение тени? Я не совсем понял ход мысли. – indragie

+0

Выключить. Заполните его, затем выключите и вычеркните градиент. –