【问题标题】:Quartz 2D Text Drawing Errors in Encoding and Transformation?编码和转换中的 Quartz 2D 文本绘制错误?
【发布时间】:2011-06-03 09:57:54
【问题描述】:

我正在为我的应用开发文本添加功能。此文本将使用 CGContext 和 Quartz 2D 添加。变量 text 是从 UITextField 的文本属性中提取的。

这是我目前的代码:

CGRect textBox = CGRectMake(0, 0, 300, 200);
UIView *textView = [[UIView alloc] initWithFrame:textBox];
const char *textChar = [text UTF8String];   

NSInteger xLocation = (contentOffset.x + 100);
CGContextSelectFont (UIGraphicsGetCurrentContext(), "Helvetica", 14.0f, kCGEncodingMacRoman);
CGContextSetShouldSmoothFonts(UIGraphicsGetCurrentContext(), YES);
CGContextSetCharacterSpacing (UIGraphicsGetCurrentContext(), 10);
CGContextSetTextDrawingMode (UIGraphicsGetCurrentContext(), kCGTextFill);
CGContextSetRGBFillColor (UIGraphicsGetCurrentContext(), 255, 255, 255, 1.0); 
CGContextShowTextAtPoint (UIGraphicsGetCurrentContext(), xLocation, 110, textChar, 9);
[drawGallery addSubview:textView];

我有几个问题:

  1. 文本呈现翻转 - (这很容易通过转换纠正,但我遵循的教程没有这个问题,所以我有点困惑LINK)。

    李>
  2. 文本呈现奇怪的字符 - 我认为这是一个编码问题,但我该如何调整呢?

  3. 文本不会添加到 addSubview 行的视图中,它只会在更新 CGContext 时添加,即我也有画线功能,如果我在视图上画文字神奇地弹出。

  4. 文本严重锯齿且渲染效果不佳,我可以为此做些什么吗?我添加了CGContextSetShouldSmoothFonts,但它似乎没有做任何事情。

示例如下:

感谢您提供的任何帮助。

【问题讨论】:

  • 您是否在 drawRect 方法中使用了与文本相关的 CGContext* 函数?

标签: objective-c quartz-graphics cgcontext


【解决方案1】:

对于文本翻转,有相同问题的人的解决方案已发布text inverted problem solution [Stackoverflow] - 使用:

CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));                  

对于编码问题,您得到的文本 cString 带有 [text UTF8String](UTF8 字符通常是多字节),但 CGContextSelectFont() 指定的是 MacRoman(单字节格式)。

朱利安

【讨论】:

    【解决方案2】:

    我已经找出了这些错误的大部分。

    1. 文本呈现翻转

    2. 文本呈现出奇怪的字符 - 我认为这是 编码问题,但我该如何调整 这个?

    3. 文本不会添加到 addSubview 行的视图中,它只会 当 CGContext 被添加时 更新,即我有画线 也有功能,如果我在视图上绘制 然后文本神奇地弹出。

    4. 文本严重锯齿且渲染效果不佳,我有什么问题吗 可以为此做些什么?我添加了一个 CGContextSetShouldSmoothFonts 但它 好像什么都没做。

    1. 使用基本转换,我能够自动翻转文本。

    2. 在这里我调整了编码,因此始终使用 MacRoman。

    3. 我必须手动调用更新 - 我编写了一个函数来执行此操作并在需要时调用它。

    4. 由于文本打印陷入循环,它似乎将文本多次打印在彼此的顶部,因此出现锯齿状。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多