Ok, lo descubrí. Básicamente, podemos anular drawRectInText
y usar nuestro propio patrón para colorear el relleno. La ventaja de hacer esto es que podemos cambiar el tamaño de la imagen en nuestro marco de patrón.
Primero creamos un objeto CGPattern y definimos una devolución de llamada para dibujar el patrón. También pasamos el tamaño de la etiqueta como parámetro en la devolución de llamada. A continuación, utilizamos el patrón que se dibuja en la devolución de llamada y establecerla como el color de relleno del texto:
- (void)drawTextInRect:(CGRect)rect
{
//set gradient as a pattern fill
CGRect info[1] = {rect};
static const CGPatternCallbacks callbacks = {0, &drawImagePattern, NULL};
CGAffineTransform transform = CGAffineTransformMakeScale(1.0, -1.0);
CGPatternRef pattern = CGPatternCreate((void *) info, rect, transform, 10.0, rect.size.height, kCGPatternTilingConstantSpacing, true, &callbacks);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGFloat alpha = 1.0;
CGColorRef patternColorRef = CGColorCreateWithPattern(patternSpace, pattern, &alpha);
CGColorSpaceRelease(patternSpace);
CGPatternRelease(pattern);
self.textColor = [UIColor colorWithCGColor:patternColorRef];
self.shadowOffset = CGSizeZero;
[super drawTextInRect:rect];
}
La devolución de llamada dibuja la imagen en el contexto. La imagen cambia de tamaño según el tamaño de fotograma que se pasa a la devolución de llamada.
void drawImagePattern(void *info, CGContextRef context)
{
UIImage *image = [UIImage imageNamed:@"FontGradientPink.png"];
CGImageRef imageRef = [image CGImage];
CGRect *rect = info;
CGContextDrawImage(context, rect[0], imageRef);
}
Niza @bigkm trabajo. Esto definitivamente agrega una envoltura fácil de usar alrededor de un código desordenado. – windson