コアテキストを使用して、Web からの 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);
}