【问题标题】:Creating a gradient fill for text using [UIColor colorWithPatternImage:]使用 [UIColor colorWithPatternImage:] 为文本创建渐变填充
【发布时间】:2011-08-09 20:56:47
【问题描述】:

我想为我的文本的填充颜色创建一个渐变。目前我正在通过将 UILabel 文本的颜色设置为

UIImage *image = [UIImage imageNamed:@"GradientFillImage.png"];
myLabel.textColor = [UIColor colorWithPatternImage:image];

其中GradientFillImage.png 是一个简单的图像文件,上面绘有线性渐变。

在我想调整字体大小之前,这可以正常工作。由于图像文件具有恒定尺寸并且在我调整字体大小时不会调整大小,因此字体的渐变填充会变得混乱。 如何创建自定义尺寸图案图像并将其用作文本的填充图案?

【问题讨论】:

    标签: objective-c ios4 core-graphics uilabel


    【解决方案1】:

    我刚刚完成了一个 UIColor 类扩展,它使它成为一个 1 行 + 块的东西。

    https://github.com/bigkm/UIColor-BlockPattern

    CGRect rect = CGRectMake(0.0,0.0,10.0,10.0);
    
    [UIColor colorPatternWithSize:rect.size andDrawingBlock:[[^(CGContextRef c) {
        UIImage *image = [UIImage imageNamed:@"FontGradientPink.png"];
        CGContextDrawImage(context, rect, [image CGImage]);
    } copy] autorelease]];
    

    【讨论】:

    • 干得好@bigkm。这无疑为一些杂乱的代码添加了一个易于使用的包装器。
    【解决方案2】:

    好的,我想通了。基本上,我们可以覆盖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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多