我正在尝试使用coretext显示文本。现在它是在delphi表单上,但我有代码似乎可以正常工作获取绘制形状的上下文(它只是从表单中获取FContext字段)。
文字看起来像这样(它是颠倒的),它假设是'at'
现在这里是代码,只需将其放入formpaint
即可 var
cgcontext : CGContextRef;
path : CGMutablePathRef;
framesetter : CTFramesetterRef;
frame : CTFrameRef;
attrString: CFAttributedStringRef;
function GetCGContextFromCanvas(ACanvas: TCanvas): CGContextRef;
var
Context: TRttiContext;
Field: TRttiField;
begin
Field := Context.GetType(ACanvas.ClassType).GetField('FContext');
Assert(Field <> nil);
Result := PPointer(Field.GetValue(ACanvas).GetReferenceToRawData)^;
end;
begin
cgcontext := GetCGContextFromCanvas(Canvas);
path := CGPathCreateMutable(); //1
CGPathAddRect(path, nil, CGRectMake(0,0,600,200));
attrString := CFAttributedStringCreate(kCFAllocatorDefault, CFSTR('at'), nil);
framesetter := CTFramesetterCreateWithAttributedString(attrString); //3
frame := CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 2), path, nil);
CTFrameDraw(frame, cgcontext); //4
end;
有关间距错误的原因有何建议?它不应该使用默认间距吗?
答案 0 :(得分:0)
..这是因为textmatrix被设置在某处,但是因为当你执行CGContextSaveGState / CGContextRestoreGState时它没有被恢复,所以textmatrix是错误的。所以只需添加CGContextSetTextMatrix(cgcontext, CGAffineTransformIdentity);