2012-04-08 60 views

回答

4

我想你可以用這個作爲初始的指導,然後構建它:

How to draw an oval speech bubble programmatically on iPhone?

下面是從後samfu_1的回答

我會做在兩次迭代中。首先獲取上下文並開始一個 路徑。填充一個橢圓,然後用三行包圍三角形 的自定義路徑。我假定以下尺寸:70寬度,62高度。倍率繪製矩形中的UIView的子類,在 實例化一個子類的UIViewController:

-(void)drawRect:(CGRect)rect { 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(ctx, 0.0, 0.0, 1.0, 1.0); 
    CGContextFillEllipseInRect(ctx, CGRectMake(0.0, 0.0, 70.0, 50.0)); //oval shape 
    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, 8.0, 40.0); 
    CGContextAddLineToPoint(ctx, 6.0, 50.0); 
    CGContextAddLineToPoint(ctx, 18.0, 45.0); 
    CGContextClosePath(ctx); 
    CGContextFillPath(ctx); 
} 

生成此在當針對一個灰 背景添加的iPhone模擬器:

enter image description here

這第二代碼例如將幾乎重複你上面生產的 。我使用靈活的尺寸實現了這個功能,當你實例化它時,它可以提供給UIView框架的 。本質上講,白色 的講話泡泡部分是用黑色筆畫繪製而成的,後面跟着 。

-(void)drawRect:(CGRect)rect { 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGRect aRect = CGRectMake(2.0, 2.0, (self.bounds.size.width * 0.95f), (self.bounds.size.width * 0.60f)); // set the rect with inset. 
    CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); //white fill 
    CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0); //black stroke 
    CGContextSetLineWidth(ctx, 2.0); 


    CGContextFillEllipseInRect(ctx, aRect); 
    CGContextStrokeEllipseInRect(ctx, aRect);  

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, (self.bounds.size.width * 0.10), (self.bounds.size.width * 0.48f)); 
    CGContextAddLineToPoint(ctx, 3.0, (self.bounds.size.height *0.80f)); 
    CGContextAddLineToPoint(ctx, 20.0, (self.bounds.size.height *0.70f)); 
    CGContextClosePath(ctx); 
    CGContextFillPath(ctx); 

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, (self.bounds.size.width * 0.10), (self.bounds.size.width * 0.48f)); 
    CGContextAddLineToPoint(ctx, 3.0, (self.bounds.size.height *0.80f)); 
    CGContextStrokePath(ctx); 

    CGContextBeginPath(ctx); 
    CGContextMoveToPoint(ctx, 3.0, (self.bounds.size.height *0.80f)); 
    CGContextAddLineToPoint(ctx, 20.0, (self.bounds.size.height *0.70f)); 
    CGContextStrokePath(ctx); 
} 

enter image description here

編輯:

您也可以參考布拉德·拉爾森的回答。在這個崗位

How to draw a "speech bubble" on an iPhone?

希望這可以幫助你。

讓我知道你是否需要更多幫助。

+0

恩......我想根據文本的長度來改變spb的大小,但我不知道如何製作它.. – tulurira 2012-04-20 04:11:41