Tamam, anladım. Temel olarak, drawRectInText
'u geçersiz kılabilir ve dolguyu renklendirmek için kendi desenimizi kullanabiliriz. Bunu yapmanın avantajı, görüntüyü desen çerçevemize yeniden boyutlandırabilmemizdir.
Önce bir CGPattern nesnesi oluşturuyoruz ve deseni çizmek için bir geri arama tanımlıyoruz. Ayrıca etiketin boyutunu geri aramada bir parametre olarak geçiriyoruz.
- (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];
}
geri arama bağlamı içine görüntü çizen: Daha sonra metnin dolgu rengi olarak callback'inde çizilmiş ve ayarlanır desen kullanın. Görüntü, geri aramaya iletilen çerçeve boyutuna göre yeniden boyutlandırılır.
void drawImagePattern(void *info, CGContextRef context)
{
UIImage *image = [UIImage imageNamed:@"FontGradientPink.png"];
CGImageRef imageRef = [image CGImage];
CGRect *rect = info;
CGContextDrawImage(context, rect[0], imageRef);
}
İyi iş @bigkm. Bu kesinlikle bazı dağınık kod etrafında sarıcı kullanımı kolay ekler. – windson