编码和转换中的Quartz 2D文本绘图错误?

时间:2011-06-03 09:57:54

标签: objective-c quartz-graphics cgcontext

我正在为我的应用程序开发文本添加功能。这篇文章将与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,但它似乎没有做任何事情。

  5. 见下面的例子:

    strange characters

    感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:2)

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

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

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

儒略

答案 1 :(得分:0)

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

  
      
  1. 文字正在翻转

  2.   
  3. 文字是用奇怪的字符渲染的 - 我认为这是一个   编码问题,但我如何调整   此

  4.   
  5. 该文本不会添加到addSubview行的视图中,仅适用于该视图   在CGContext中添加   更新,即我有画线   功能也是如果我画在视图上   然后文本神奇地弹出。

  6.   
  7. 文字很可怕,呈现的很糟糕,有什么我的   可以做到这一点?我添加了一个   CGContextSetShouldSmoothFonts但它   似乎没有做任何事情。

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

  2. 我在这里调整了编码,因此整个过程都使用了MacRoman。

  3. 我不得不手动调用更新 - 我编写了一个功能,并在需要的地方调用它。

  4. 由于文本打印被一个循环捕获,它似乎在对方之上多次打印文本,因此是锯齿状。