私はそれを理解しました。基本的には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