У меня возникли проблемы с рисованием 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 действительно показывает. Любое руководство ценится.
Это 'rainbowCircle' слой подслой из вашей точки зрения? – CodaFi
Теперь, rainbowCircle - это UILabel. –