2012-09-01 49 views
0

我想用笔画画一段文字。因此,做一些搜索和试验似乎是做到这一点的方法是将UIView子类化并在drawRect中用笔划绘制文本。图纸代码如下。如何判断UITextView文本是否包装?

我使用它设置的方式,我使用UITextView输入交互式文本,然后将文本传递到用笔画绘制的UIView子类广告。

这似乎是完美的工作。唯一的问题是按下返回键(创建一个新行),或者换行因为它对于UITextView而言变得太宽,这些信息不会被传递,所以我的renderd(描边)文本中没有新行在UIView子类中。

任何帮助?

绘图代码(注意,theText是传递的UITextView的文本属性):

UIFont *font = [UIFont fontWithName:@"Arial" size:fontSize]; 
    CGPoint point = CGPointMake(0,0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0); 
    CGContextSetLineWidth(context, 4.0); 
    CGContextSetTextDrawingMode(context, kCGTextFillStroke); 
    CGContextSaveGState(context); 
    [theText drawAtPoint:point withFont:font]; 
    CGContextRestoreGState(context); 

回答

0

您必须复制的UITextView的包装逻辑。询问字符串需要多长时间的子字符串,以及什么时候需要很长的时间来适应它的包装。

你也可以看看DTCoreText,一个让你渲染属性文本的类。然而,模仿textviews并支持文本输入的版本花费了一些东西。最后,成本可能是值得的,因为复制一个文本视图需要时间。

+0

谢谢大卫。这是说当返回键被按下时(\ n)没有隐藏的代码,当文本被包装时也是如此。因为如果有的话,我想这只是一个阅读这些角色并传递给他人的问题。 – Mrwolfy

+0

返回键几乎可以肯定 - 它是一个字符,告诉textView去下一行。它的另一个对你来说最成问题的包装 - 超越,缩短了一个单词变短的地方,使视图回绕一行。我敢说你最好写自己的UITextView,而不是去猜测它的做法。你确定你使用的字体在Unicode空间中没有删除字符吗?你可能能够找到或购买一个这样的字体,然后你就可以更容易 - 只需要替换字符。 –

相关问题