gpt4 book ai didi

cocoa - 无法指定 CTLineDraw 的填充样式

转载 作者:行者123 更新时间:2023-12-03 16:28:39 26 4
gpt4 key购买 nike

我对 OS-X/Cocoa 开发还很陌生,并且在使用 CTDrawLine 时遇到了一些问题。当使用 kCGTextStroke 绘图时,我可以愉快地使用 CGContextSetStrokeXXX 变体(我什至可以使用图案)更改文本的笔画,但是当我将模式设置为 kCGTextFill 时,当前上下文的填充样式将被忽略,文本将呈现为黑色。下面是一些演示该问题的代码。

-(void) drawRect: (NSRect)rect {
CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];


float x = 50;
float y = 50;

CTFontRef font = CTFontCreateWithName(CFSTR("Arial"), 74, NULL);

CFStringRef stringRef = CFStringCreateWithCString(NULL, "Hello SO", kCFStringEncodingUTF8);
CFStringRef keys[] = { kCTFontAttributeName };
CFTypeRef values[] = { font };
CFDictionaryRef attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void**)&keys,
(const void**)&values, sizeof(keys)/sizeof(keys[0]),
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);

CFAttributedStringRef attrString = CFAttributedStringCreate(kCFAllocatorDefault, stringRef, attributes);
CTLineRef line = CTLineCreateWithAttributedString(attrString);

CGContextSetTextPosition(context, x, y);
CGContextSetTextDrawingMode(context, kCGTextFill);

// why doesn't this work?
CGContextSetRGBFillColor(context, 1, 0, 0, 1);
CGContextFillRect(context, CGRectMake(0, 0, 200, 200));
CTLineDraw(line, context);

CFRelease(stringRef);
CFRelease(attributes);
CFRelease(line);
CFRelease(attrString);
CFRelease(font);
}

我希望文本是红色的,下面有一个红色方 block (文本不会在这种背景下显示)。相反,我看到一个带有黑色文本的红色方 block 。

CTDrawLine 的极其详细的文档说:CT线绘制绘制一条完整的线。

在 CoreText 或 Quartz 的引用中没有明显的替代路线来指定填充样式。我获得所需文本填充样式的唯一方法是使用 kCGTextClip 并在该区域上填充矩形,这是愚蠢的。

我正在 OS-X 10.9 上进行测试,并使用 XCode 5 和 C++11 语言扩展进行构建,这是在 .mm 文件中(尽管我怀疑这会导致问题)。

我错过了什么?

附录:

可能值得注意的是,我想要的最终结果是能够渲染充满图案和纯色的文本。

最佳答案

经过一番摆弄后,我发现您必须添加 kCTForegroundColorFromContextAttributeName, https://developer.apple.com/library/ios/documentation/Carbon/Reference/CoreText_StringAttributes_Ref/Reference/reference.html

CFStringRef keys[] = { kCTFontAttributeName, kCTForegroundColorFromContextAttributeName };
CFTypeRef values[] = { font, kCFBooleanTrue };

关于cocoa - 无法指定 CTLineDraw 的填充样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com