大家好日子。
目前我正在尝试使用NSAttributedString的suppport实现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);
我试图谷歌,但没有找到与我的问题相关的任何内容=(感谢任何帮助(链接或建议)。
答案 0 :(得分:1)
尝试一些事情:
data = calloc(POTHigh, POTWide * 4);
用于RGB色彩空间。 CTFrameDraw
与GL coords相关,因此您无需使用CGContextScaleCTM(context, 1.0f, -1.0f);
drawInRect:
。答案 1 :(得分:0)
您可能需要查看ActiveTextView-iOS(https://github.com/storify/ActiveTextView-iOS)。它可能有用。
答案 2 :(得分:0)
使用它来获得颜色纹理:
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide, colorSpace, kCGImageAlphaPremultipliedLast);