在图像上写多行

时间:2011-08-10 13:22:14

标签: ios4 uiimage

text1是一个很长的字符串,所以,我想要多行支持。 我该怎么做?

    int w = img.size.width;
    int h = img.size.height;

    CGColorSpaceRef colorSpace= CGColorSpaceCreateDeviceRGB();

    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4*w, colorSpace, kCGImageAlphaPremultipliedFirst);

    CGContextDrawImage(context, CGRectMake(0,0, w, h), img.CGImage);
    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);
    char* text = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];
    CGContextSelectFont(context, "Arial", 18, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode(context, kCGTextFill);
    CGContextSetRGBFillColor(context, 255,255,255,1);

    //CGContextSetTextMatrix(context, CGAffineTransformMakeRotation(-M_PI/4));;
    CGContextShowTextAtPoint(context, w/3 + 10, 5, text, strlen(text));
    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    return [UIImage imageWithCGImage:imageMasked];

2 个答案:

答案 0 :(得分:2)

如果您不介意使用UIKit方法而不是CGContext方法来绘制文本,您可以使用drawInRect:withFont:lineBreakMode:绘制文本,这将为您处理包装。请注意,您可以使用UIGraphicsPushContextUIGraphicsPopContext从现有的CGGraphicsRef转到UIKit上下文,如果您的目标是iOS 4.0以上,则必须在主线程上进行UIKit绘图。

答案 1 :(得分:1)

我假设你想支持多线。

然后你总是可以使用它:

 CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
                   constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];

指定宽度和高度(:CGSizeMake(240.0, 480.0)),字体类型和大小,然后为text1.frame分配此大小。

您将根据字符串获取尺寸,并在那里调整文字。