1

我使用核心文本来显示来自网络的一些 json 文本。内容是从填充到 UITABLEVIEW 的 nsdictionary 中提取的。

我的问题是 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);

}
4

1 回答 1

0

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

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

阅读View Programming Guide for iOS中的视图绘制周期。

于 2012-07-30T19:09:51.210 回答