祝大家有美好的一天。
目前我正在尝试实现支持 NSAttributedString 的 CCLabelTTF 子类以获取多色标签。而且我因缺乏 CoreText 和 CoreGraphics 知识而受到阻碍。
在阅读了一些指南后,我创建了 CCTexture2D 类别以使用 NSAttributedString 对象创建纹理。
这是我的绘图代码:
data = calloc(POTHigh, POTWide * 2);
colorSpace = CGColorSpaceCreateDeviceGray();
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide, colorSpace, kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);
if( ! context )
{
free(data);
[self release];
return nil;
}
UIGraphicsPushContext(context);
CGContextTranslateCTM(context, 0.0f, POTHigh);
CGContextScaleCTM(context, 1.0f, -1.0f);
// draw attributed string to context
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectMake(0.f, 0.f, dimensions.width, dimensions.height));
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);
CTFrameDraw(frame, context);
UIGraphicsPopContext();
CFRelease(frame);
CGPathRelease(path);
CFRelease(frameSetter);
现在我遇到了一些麻烦:
第一个 - 我的纹理显示为垂直翻转。我想,这些线条
CGContextTranslateCTM(context, 0.0f, POTHigh);
CGContextScaleCTM(context, 1.0f, -1.0f);
应该防止这种情况。
第二个,如果我创建 RGB 上下文,我在屏幕上看不到任何东西。我试图用这些线创建 RGB 上下文。
colorSpace = CGColorSpaceCreateDeviceRGB();
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide * 4, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Big);
我试图用谷歌搜索,但没有找到与我的问题相关的任何内容=(感谢任何帮助(链接或建议)。