Macos 如何在CTFrameRef中每行仅绘制8个字符?

Macos 如何在CTFrameRef中每行仅绘制8个字符?,macos,cocoa,drawing,core-graphics,core-text,Macos,Cocoa,Drawing,Core Graphics,Core Text,我试图在CTFrameRef中绘制每行8个字符,但我不知道如何使用CTFrameRef 我读过“”,但他们使用CTLine,我认为使用CTFrameRef更简单 也许通过某种帧设置器或更改CGPath,这是可能的 这是我现在的代码(我已经删除了关于该问题的测试代码中的注释行): //准备字体 CTFontRef font=CTFontCreateWithName(CFSTR(“LucidaSansUnicode”),16,空; //创建路径 CGMutablePathRef gpath=CGPa

我试图在CTFrameRef中绘制每行8个字符,但我不知道如何使用CTFrameRef

我读过“”,但他们使用CTLine,我认为使用CTFrameRef更简单

也许通过某种帧设置器或更改CGPath,这是可能的

这是我现在的代码(我已经删除了关于该问题的测试代码中的注释行):

//准备字体
CTFontRef font=CTFontCreateWithName(CFSTR(“LucidaSansUnicode”),16,空;
//创建路径
CGMutablePathRef gpath=CGPathCreateMutable();
cgpath-addrect(gpath,NULL,CGRectMake(0,0,200,200));
//创建属性化字符串
CGContextSetTextDrawingMode(新上下文,kCGTextFillStroke);
CGContextSetGrayFillColor(newcontext,0.0,1.0);
CFStringRef键[]={kCTFontAttributeName};
CFTypeRef值[]={font};
CFDictionaryRef attr=CFDictionaryCreate(NULL,(const void**)和键,
(const void**)和值,sizeof(键)/sizeof(键[0]),
&kCFTypeDictionaryKeyCallBacks和KCFTypeDictionaryValue Callbacks);
CFAttributedStringRef attrString=CFAttributedStringCreate(空,
CFSTR(“Aenean lacinia bibendum nulla sed concertetur.”),attr;
CTFramesetterRef framesetter=
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
CTFrameRef theFrame=
CTFramesetterCreateFrame(帧设置器,CFRangeMake(0,
CFAttributedStringGetLength(attrString)),gpath,NULL);
CTFrameDraw(theFrame,newcontext);
//清理。。。发布。。。
//获取TIFF图像
我得到以下图片:

但是我想要这样的东西(有区别,因为这张图片是用photoshop制作的):


关于我的英语,谢谢,对不起。

为什么你认为
CTFrame
CTLine
更容易解决这类问题?您需要一个不寻常的换行算法
CTFrame
使用默认的换行算法

将输入分解为8个字符的
NSAttributedString
运行,并使用它们创建
CTLineRef
对象,然后绘制它们。这应该是非常直截了当的。是什么引起了混乱