2012-07-11 292 views
2

我正在跳入其中。将文本绘制成椭圆形

我正在用UIBezierPath绘制讲话泡泡,泡泡很好,按我的预期工作。问题是如何将文本添加到对话框中,以便它保留在UIBezierPath之内。我没有绘制文本的经验,而且我很难提出可能的解决方案。

我试过在泡泡里面放一个textview,但是解决方案并没有很好地工作,我想使用更多的泡泡。使用textview我只能使用矩形形状,我想从上到下填充气泡,并使用中间的完整宽度。

任何帮助和建议将非常appriciated。

enter image description here

+0

如果你知道它是一个椭圆形,有多大你绘制将文本,然​​后有一定的方程,可以让你做你想做的。 (x^2)/ a^2 +(y^2)/ b^2 = 1可以很容易地被调整来测试一个点是否在椭圆内。就我个人而言,如果没有至少数量适中的数学,我不知道这样做的方法。你可能想要去math.stackexchange.com – Dustin 2012-07-11 12:31:11

+0

嗨达斯汀,感谢您的信息。我会看看math.stackexchange.com,看看我是否想出任何东西。 – MortenHN 2012-07-12 05:52:44

+0

@MortenHN我正在寻找一些关于气泡部分的帮助。小心分享你如何运作?谢谢 – aVC 2013-06-07 16:31:12

回答

3

好吧,我终于想通了如何绘制/渲染上bezierpath文本,它可以通过采取CGPath,并采用核心文本来完成。我做了这个方法。

-(void)drawText:(NSString *)text { 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 

    CGContextSaveGState(myContext); 

    CGContextTranslateCTM(myContext, 0.0f, self.frame.size.height); 
    CGContextScaleCTM(myContext, 1.0f, -1.0f); 

    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attString); // 7-2 
    CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL); // 8-2 

    CTFrameDraw(theFrame, myContext); // 11-2 
    CGContextRestoreGState(myContext); 
} 

我遵循本教程,女巫是优秀的。 http://invasivecode.tumblr.com/core-text

现在我只需要弄清楚如何计算bezierpath的大小来包含所有的文本,并计算出如何将bezierpath和核心文本一起移动,它们运行在不同的坐标系上,并给我所有类型的问题。所以,如果有人有这方面的经验,我都耳朵!

问候 莫滕

+0

你引用的教程非常出色。它不仅提供技术内容,而且具有可读性;)具有适当的语法,拼写等。 – mobibob 2012-09-10 19:05:52