ctframe不更新ctlines

时间:2012-07-30 19:04:52

标签: objective-c ios xcode

我正在使用核心文本来显示来自网络的一些json文本。 内容从nsdictionary中提取,该nsdictionary被弹出到UITABLEVIEW。

我的问题是ctframe不想更新最新内容,它会不断重绘旧文本。我调试了它,我很确定ctframesettercreateframe使用的是最新的NSAttributeString

这是我的代码, 我在每个点都调用此函数来显示新文本。标记解析器只返回NSAtributeString

- (void)assign_text:(NSString*)text{
self.text = text;


CGMutablePathRef path = CGPathCreateMutable(); //1
CGPathAddRect(path, NULL, self.bounds );

MarkupParser *markup = [[MarkupParser alloc]init];
NSAttributedString* attString = [markup attrStringFromMarkup: self.text];


CFAttributedStringRef a = (__bridge_retained CFAttributedStringRef)attString;
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(a); //3

ctFrame =  CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL);


CFRelease(a);
CFRelease(path);
CFRelease(framesetter);


}

- (void)drawRect:(CGRect)rect
{

CGContextRef context = UIGraphicsGetCurrentContext();

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

}

1 个答案:

答案 0 :(得分:0)

修改ctFrame实例变量后,您需要自己发送setNeedsDisplay消息:

ctFrame = CTFramesetterCreateFrame(...);
[self setNeedsDisplay];

Read about the view drawing cycle in the View Programming Guide for iOS