2012-07-11 301 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