2011-08-10 55 views
2

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]; 
+0

不要放棄。我加了一個賞金。也許現在有人能夠回答它。 :) – Gumbo

+0

Thanx很多@Gumbo ... –

+0

爲什麼這個標籤「monotouch」? – jamie

回答

2

如果您不介意使用UIKit方法而不是CGContext方法繪製文本,則可以使用drawInRect:withFont:lineBreakMode:來繪製文本,該文本將爲您處理包裝。請注意,您可以使用UIGraphicsPushContextUIGraphicsPopContext從您現有的CGGraphicsRef轉到UIKit上下文,如果您的目標iOS版本高於4.0,則必須在主線程上執行UIKit繪圖。

+0

在drawInRect中,我可以在背景中添加顏色,我想設置一個圖像作爲背景。我嘗試了這一點,但它顯示了我的一半圖像中的黑色背景。任何幫助? –

+0

@SmritiYadav:NSString方法(由UIKit添加)'drawInRect:withFont:lineBreakMode:'不繪製任何背景,只是文本。 – Anomie

+0

我在上下文中使用它。我無法在我的代碼中正確實現這一點。我想在我的圖片上寫一些文字。但它返回我CGSize,我沒有傳遞參數中的文本!你可以給我提供一些代碼,告訴我如何使用這種方法,這將是非常有用的。 –

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

你會根據你的字符串得到你的大小,你的文字將在那裏調整。

+0

如果你誤解了這個問題,我很抱歉,但我正在寫這個text1在一個圖像,我想這支持多行。所以我不能設置text1的框架,因爲它不是用戶界面對象。你有其他選擇嗎? –