長方形に属性付きの文字列を描画する次のコードがあります。
CGContextRef context = UIGraphicsGetCurrentContext();
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)string);
// left column form
CGMutablePathRef leftColumnPath = CGPathCreateMutable();
CGPathAddRect(leftColumnPath, NULL, CGRectMake(rect.origin.x, -rect.origin.y,rect.size.width, self.bounds.size.height));
// left column frame
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), leftColumnPath, NULL);
CTFrameDraw(leftFrame, context);
ここではすべて正常に機能しますが、個々の行をより細かく制御する必要があります。そのため、フレームを描くのではなく、各線を別々に描きたいと思います。だから私はこれを使ってCTFrameDrawを使う代わりに試しています:
CFArrayRef linesArray = CTFrameGetLines(leftFrame);
for (CFIndex i = 0; i < CFArrayGetCount(linesArray); i++){
CTLineRef line = CFArrayGetValueAtIndex(linesArray, i);
CTLineDraw(line, context);
}
ただし、これはフレームを描画するのと同じ結果を描画しません。私はCoreTextの初心者ですが、線を引くためにもっとやるべきことはありますか?現在、このループは数回実行されますが、画面の下部に描画される線は1つだけです(CTFrameDrawでは上部に描画されません)。