2013-06-01 2 views
0

У меня возникли проблемы с рисованием UILabel из раскадровки; это всегда пусто. Метка определяется как свойство self.rainbowCircle. Вот настройки в моем контроллере представления:drawLayer: inContext на UILabel

self.rainbowCircle.layer.name = @"Rainbow Layer"; 
self.rainbowCircle.layer.delegate = self; 
[self.rainbowCircle.layer setNeedsDisplay]; 

и вот drawLayer: InContext:

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    CGContextSaveGState(ctx); 
    if ([layer.name isEqualToString:@"Rainbow Layer"]) { 
     NSLog(@"here"); 
     NSArray *rainbowColorsArray = [NSArray arrayWithObjects: 
             (id)[UIColor colorWithHue:0.0     saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             (id)[UIColor colorWithHue:1.0*360.0/6.0/360.0 saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             (id)[UIColor colorWithHue:2.0*360.0/6.0/360.0 saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             (id)[UIColor colorWithHue:3.0*360.0/6.0/360.0 saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             (id)[UIColor colorWithHue:4.0*360.0/6.0/360.0 saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             (id)[UIColor colorWithHue:5.0*360.0/6.0/360.0 saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             (id)[UIColor colorWithHue:1.0     saturation:1.0 brightness:1.0 alpha:1.0].CGColor, 
             nil]; 
     CGColorSpaceRef deviceRGB = CGColorSpaceCreateDeviceRGB(); 
     CGGradientRef gradient = CGGradientCreateWithColors(deviceRGB, (__bridge CFArrayRef) (rainbowColorsArray), NULL); 
     CGContextDrawRadialGradient(ctx, gradient, self.rainbowCircle.center, 0.0, self.rainbowCircle.center, self.rainbowCircle.bounds.size.width/2.0, kCGGradientDrawsBeforeStartLocation); 
     CGColorSpaceRelease(deviceRGB); 
     CGGradientRelease(gradient); 
    } else { 
     [self drawPalette:self.currentPalette inLayer:layer inContext:ctx]; 
    } 
    CGContextRestoreGState(ctx); 
} 

Я смотрел на это в течение достаточно долгого времени и просто не понимаю, что я m отсутствует. NSLog действительно показывает. Любое руководство ценится.

+0

Это 'rainbowCircle' слой подслой из вашей точки зрения? – CodaFi

+0

Теперь, rainbowCircle - это UILabel. –

ответ

3

Вы не можете изменить делегат слоя UIView, он должен быть вид сам

+0

Если это правда, то почему drawLayer: inContext существует? –

+2

@MichaelMangold Если вы создаете слой самостоятельно ('CALayer * myLayer = [CALayer layer]'), вы можете установить его «делегат» в любой объект, который вы хотите. Если вы спросите о своем слое ('self.rainbowCircle.layer'), вам не разрешается изменять его« делегат ». –

+1

@MichaelMangold См. [Документация свойства 'UIView layer'] (http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/ uid/TP40006816-CH3-SW31): «Кроме того, вы никогда не должны менять делегата этого объекта слоя». –

Смежные вопросы