좋아, 알아 냈어. 기본적으로 drawRectInText
을 무시하고 자체 패턴을 사용하여 채우기 색상을 지정할 수 있습니다. 이렇게하는 것의 이점은 이미지를 패턴 프레임으로 리사이즈 할 수 있다는 것입니다.
먼저 CGPattern 개체를 만들고 패턴을 그리는 콜백을 정의합니다. 또한 콜백의 매개 변수로 레이블의 크기를 전달합니다.
- (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];
}
콜백 컨텍스트에 이미지를 그립니다 : 우리는 텍스트의 채우기 색상으로 콜백 그려 및 설정 패턴을 사용합니다. 이미지는 콜백에 전달 된 프레임 크기에 따라 크기가 조정됩니다.
void drawImagePattern(void *info, CGContextRef context)
{
UIImage *image = [UIImage imageNamed:@"FontGradientPink.png"];
CGImageRef imageRef = [image CGImage];
CGRect *rect = info;
CGContextDrawImage(context, rect[0], imageRef);
}
니스 작업 @bigkm. 이것은 확실히 지저분한 코드 주위에 사용하기 쉬운 래퍼를 추가합니다. – windson