2011-11-30 43 views
6

我聽說我可以使用CoreText顯示NSAttributedString,任何人都可以告訴我如何(最簡單的方法)?使用CoreText顯示NSAttributedString

請不要用CATextLayer或OHAttributedLabel回答。

我知道有很多關於這個在這個論壇的問題,但我還沒有找到答案

謝謝!

+2

如果你不想使用這些包裝,看看裏面,他們是如何工作的。 – vikingosegundo

回答

10

我認爲,最簡單的方法(使用核心文本)是:

// Create the CTLine with the attributed string 
CTLineRef line = CTLineCreateWithAttributedString(attrString); 

// Set text position and draw the line into the graphics context called context 
CGContextSetTextPosition(context, x, y); 
CTLineDraw(line, context); 

// Clean up 
CFRelease(line); 

使用Framesetter是更有效的,如果你是抽籤的文本,但是這是推薦的方法如果您只需顯示少量文本(如標籤)並且不需要創建路徑或框架(因爲它是由CTLineDraw自動完成的),則由Apple創建。

11

最簡單的方法?事情是這樣的:

CGContextRef context = UIGraphicsGetCurrentContext(); 

// Flip the coordinate system 
CGContextSetTextMatrix(context, CGAffineTransformIdentity); 
CGContextTranslateCTM(context, 0, self.bounds.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

// Create a path to render text in 
CGMutablePathRef path = CGPathCreateMutable(); 
CGPathAddRect(path, NULL, self.bounds); 

// An attributed string containing the text to render 
NSAttributedString* attString = [[NSAttributedString alloc] 
            initWithString:...]; 

// create the framesetter and render text 
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString); 
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, 
         CFRangeMake(0, [attString length]), path, NULL); 

CTFrameDraw(frame, context); 

// Clean up 
CFRelease(frame); 
CFRelease(path); 
CFRelease(framesetter); 
1

從IOS 6起,你可以做到以下幾點:

NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init]; 
[paragrahStyle setLineSpacing:40]; 
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [labelText length])]; 

cell.label.attributedText = attributedString ; 
相關問題