2011-11-04 78 views
2

我尝试创建核心图形的Siri聊天泡沫。我正处于一个可以绘制形状的阶段。我被卡在这里的颜色。 Wanaa获取边框颜色和填充颜色代码。 这里是我做过什么,到目前为止..的Siri聊天气泡的颜色在iOS版

- (void)drawInContext:(CGContextRef)context 
{ 

CGRect rect = gradientRectFrame; 
CGFloat radius = 30; 

CGFloat originBufferX = 0.0; 
CGFloat originBufferY = 0.0; 
CGFloat rightAngleTriangleWidth = 20.0; 
CGFloat rightAngleTriangleHeight = 20.0; 
CGFloat fullRectWidth = rect.size.width; 
CGFloat fullRectHeight = rect.size.height; 


CGPoint pointZero = CGPointMake(originBufferX, fullRectHeight); 
CGPoint pointOne = CGPointMake(originBufferX + rightAngleTriangleWidth, fullRectHeight - rightAngleTriangleHeight); 
CGPoint pointTwo = CGPointMake(originBufferX + rightAngleTriangleWidth, radius + originBufferY); 
CGPoint pointThree = CGPointMake(originBufferX + fullRectWidth - radius, 0 + originBufferY); 
CGPoint pointFour = CGPointMake(fullRectWidth, originBufferY + fullRectHeight - radius);  
CGContextSetRGBFillColor(context, 105/255, 105/255, 105/255, 0.5); 
CGContextSetLineWidth(context, 2.0); 


CGContextMoveToPoint(context, pointZero.x, pointZero.y); 

CGContextAddLineToPoint(context, pointOne.x, pointOne.y); 

CGContextAddLineToPoint(context, pointTwo.x, pointTwo.y); 

CGContextAddArc(context, rightAngleTriangleWidth + radius, originBufferY + radius, radius, M_PI, -M_PI_2, 0); 

CGContextAddLineToPoint(context, pointThree.x, pointThree.y); 

CGContextAddArc(context, fullRectWidth - radius, originBufferY + radius, radius, -M_PI_2, 0.0f, 0); 

CGContextAddLineToPoint(context, pointFour.x, pointFour.y); 

CGContextAddArc(context, fullRectWidth - radius, originBufferY + fullRectHeight - radius, radius, 0.0f, M_PI_2, 0); 

CGContextAddLineToPoint(context, pointZero.x, pointZero.y); 

CGContextFillPath(context); 

CGContextSetRGBStrokeColor(context, 50/255, 50/255, 50/255, 0.5); 

// CGContextSetRGBStrokeColor(背景下,1.0,0.0,0.0,1.0);

CGContextStrokePath(context); 

}

Chat Bubble

enter image description here

更新的代码:我米现在使用CGPath代替CGContenxt我填我的道路后,重绘我的道路。这是新的代码。虽然,我的笔触颜色是不是很接近但..

- (void)drawInContext:(CGContextRef)context 

{ 

CGRect rect = gradientRectFrame; 
CGFloat radius = 20; 

CGFloat originBufferX = 0.0; 
CGFloat originBufferY = 0.0; 
CGFloat rightAngleTriangleWidth = 20.0; 
CGFloat rightAngleTriangleHeight = 20.0; 
CGFloat fullRectWidth = rect.size.width; 
CGFloat fullRectHeight = rect.size.height; 


CGPoint pointZero = CGPointMake(originBufferX, fullRectHeight); 
CGPoint pointOne = CGPointMake(originBufferX + rightAngleTriangleWidth, fullRectHeight - rightAngleTriangleHeight); 
CGPoint pointTwo = CGPointMake(originBufferX + rightAngleTriangleWidth, radius + originBufferY); 
CGPoint pointThree = CGPointMake(originBufferX + fullRectWidth - radius, 0 + originBufferY); 
CGPoint pointFour = CGPointMake(fullRectWidth, originBufferY + fullRectHeight - radius);  

CGContextSetRGBStrokeColor(context, 0.8, 0.8, 0.8, 0.3); 

CGMutablePathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path, NULL, pointZero.x, pointZero.y); 

CGPathAddLineToPoint(path, NULL, pointOne.x, pointOne.y); 

CGPathAddLineToPoint(path, NULL, pointTwo.x, pointTwo.y); 

CGPathAddArc(path, NULL, rightAngleTriangleWidth + radius, originBufferY + radius, radius, M_PI, -M_PI_2, 0); 

CGPathAddLineToPoint(path, NULL, pointThree.x, pointThree.y); 

CGPathAddArc(path, NULL, fullRectWidth - radius, originBufferY + radius, radius, -M_PI_2, 0.0f, 0); 

CGPathAddLineToPoint(path, NULL, pointFour.x, pointFour.y); 

CGPathAddArc(path, NULL, fullRectWidth - radius, originBufferY + fullRectHeight - radius, radius, 0.0f, M_PI_2, 0); 

CGPathAddLineToPoint(path, NULL, pointZero.x, pointZero.y); 

CGContextSaveGState(context); 
CGContextAddPath(context, path); 

CGContextSetLineWidth(context, 2.0f); 
CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 0.1f); 
CGContextFillPath(context); 

CGContextAddPath(context, path); 
CGContextStrokePath(context); 

} 

enter image description here

+0

是您的代码的输出上面的图片,或者这是你想达到Siri的屏幕截图? – larsacus

+0

我已经添加了我的输出。这是第二个图像.. – Mobilewits

回答

2

填充颜色主要是白色likley用约10%的不透明度。所以原始的背景(像图案一样的织物)通过并变得稍微更亮。边框的颜色也是白色的,但不透明度约为30%。

此外,还有轻微的阴影在右侧和在边境的底部。

至于颜色,你需要大约:

CGContextSaveGState(context); 
CGContextSetShadow(context, CGSizeMake(-15f, -20f), 1.0f); 
CGContextSetLineWidth(context, 2.0f); 
CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 0.1f); 
CGContextFillPath(context); 
CGContextRestoreGState(context); 

CGContextSetRGBStrokeColor(context, 1.0f, 1.0f, 1.0f, 0.3f); 
CGContextStrokePath(context); 
+0

我该如何应用borderColor并在代码中填充颜色。如果我设置它,只有一个borderColor或填充颜色被设置,另一个被忽略。 – Mobilewits

+0

@Jacob:查看我的更新 – Codo

+0

@Jacob:还有另一个阴影效果更新。但是我对正确的参数没有太多的经验。 – Codo