gpt4 book ai didi

objective-c - ios CCLabelTTF 带有核心文本的彩色子类

转载 作者:行者123 更新时间:2023-11-29 04:37:03 24 4
gpt4 key购买 nike

祝大家有美好的一天。

目前我正在尝试实现 CCLabelTTF 子类并支持 NSAttributedString 以获得多色标签。而且我因缺乏 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);

我尝试用谷歌搜索,但没有找到与我的问题相关的任何内容=(任何帮助(链接或建议)表示赞赏。

最佳答案

可以尝试的几件事:

  • 您的数据分配对于 RGB 来说不够大。尝试:data = calloc(POTHigh, POTWide * 4); 对于 RGB 颜色空间。
  • CTFrameDraw 相对于 GL 坐标进行绘制,因此您无需使用 CGContextScaleCTM(context, 1.0f, -1.0f);
    • 该行被放入 CCLabelTTF 的原始 CCTexture2D 创建中,因为它使用 NSString 的 drawInRect: 来绘制与 UIKit 坐标相关的内容。
  • 也许尝试其他 alpha 蒙版标志...?查看 Apple 的文档 Supported Pixel Formats iOS 看看您有什么选择。

关于objective-c - ios CCLabelTTF 带有核心文本的彩色子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936996/

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