我聽說我可以使用CoreText顯示NSAttributedString,任何人都可以告訴我如何(最簡單的方法)?使用CoreText顯示NSAttributedString
請不要用CATextLayer或OHAttributedLabel回答。
我知道有很多關於這個在這個論壇的問題,但我還沒有找到答案
謝謝!
我聽說我可以使用CoreText顯示NSAttributedString,任何人都可以告訴我如何(最簡單的方法)?使用CoreText顯示NSAttributedString
請不要用CATextLayer或OHAttributedLabel回答。
我知道有很多關於這個在這個論壇的問題,但我還沒有找到答案
謝謝!
我認爲,最簡單的方法(使用核心文本)是:
// 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創建。
最簡單的方法?事情是這樣的:
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);
從IOS 6起,你可以做到以下幾點:
NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init];
[paragrahStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;
如果你不想使用這些包裝,看看裏面,他們是如何工作的。 – vikingosegundo