1

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

}
4

1 に答える 1

0

インスタンス変数を変更したら、次のメッセージctFrameを自分自身に送信する必要があります。setNeedsDisplay

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

ビューの描画サイクルについては、iOS 用ビュー プログラミング ガイドを参照してください。

于 2012-07-30T19:09:51.210 に答える