6

我正在尝试创建一个文本图像以放在另一个图像之上。文本需要有白色填充和黑色描边轮廓。我正在使用objective-C,它适用于iPhone。我可以让文字显示出来;但是,我无法弄清楚如何让笔触和填充颜色发生变化。

self.bigImage是指向我的 xib 中的 UIImage 的指针。

这是我的代码:(此代码有效......我希望它有一个带有白色填充的黑色笔触)

- (IBAction)submitBtn:(id)sender {

    UIFont *myfont = [UIFont fontWithName:@"myfont" size:32];

    UIImage *textImage = [self imageFromText:@"teststring" font:myfont];
    CGSize finalSize = [self.bigImage.image size];
    CGSize textSize = [textImage size];

    UIGraphicsBeginImageContext(finalSize);
    [self.bigImage.image drawInRect:CGRectMake(0,0, finalSize.width, finalSize.height)];
    [textImage drawInRect:CGRectMake(0, 0, textSize.width, textSize.height)];

    UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    self.bigImage.image = newImg;
}

-(UIImage *)imageFromText:(NSString *)text font:(UIFont *)font {
    CGSize size  = [text sizeWithFont:font];

    // check if UIGraphicsBeginImageContextWithOptions is available (iOS is 4.0+)
    if (UIGraphicsBeginImageContextWithOptions != NULL)
        UIGraphicsBeginImageContextWithOptions(size,NO,0.0);
    else
        // iOS is < 4.0
        UIGraphicsBeginImageContext(size);

    [text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font];

    // transfer image
    UIImage *Image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return Image;
}



我可以让它渲染一个或另一个。如果我添加此代码,我会得到一个黑色中风:

CGContextSetTextDrawingMode(UIGraphicsGetCurrentContext(), kCGTextStroke);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor blackColor] CGColor]);



如果我添加此代码,我会得到一个白色字体:

CGFloat fontColor[4] = {255,255,255,1};
CGContextSetFillColor(UIGraphicsGetCurrentContext(), fontColor);

但是如果我添加两个片段,我会得到黑色笔触,但字体颜色是透明的......



已解决:感谢“Brane”的一点帮助:

我需要在以下代码之前添加这段代码drawAtPoint

CGFloat fontColor[4] = {255,255,255,1};
CGContextSetFillColor(UIGraphicsGetCurrentContext(), fontColor);
CGContextSetTextDrawingMode(UIGraphicsGetCurrentContext(), kCGTextFillStroke);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor blackColor] CGColor]);
4

3 回答 3

8

我修复了:

[theText drawAtPoint:CGPointMake(x, y)
                  withAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:8], NSForegroundColorAttributeName:[UIColor whiteColor] }];

最后!!!

感谢列维

列维

于 2014-01-26T19:35:59.043 回答
3

两个问题要解决。

首先,为了绘制背景,不能依赖drawAtPoint:withFont:因为它不绘制背景。

使用 CGContextFillRect 绘制背景颜色:

[[UIColor whiteColor] set];
CGContextFillRect( UIGraphicsGetCurrentContext(), CGRectMake( 0, 0, size.width, size.height )

其次,您需要使用设置描边颜色

[[UIColor blackColor] set];

打电话之前[text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font];

于 2013-02-25T19:36:43.193 回答
3

我通过修改 Brane 的帖子解决了这个问题......我需要先添加这段代码drawAtPoint......

CGFloat fontColor[4] = {255,255,255,1};
CGContextSetFillColor(UIGraphicsGetCurrentContext(), fontColor);
CGContextSetTextDrawingMode(UIGraphicsGetCurrentContext(), kCGTextFillStroke);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor blackColor] CGColor]);
于 2013-02-25T21:54:16.357 回答