我尝试创建核心图形的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);
}
更新的代码:我米现在使用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);
}
是您的代码的输出上面的图片,或者这是你想达到Siri的屏幕截图? – larsacus
我已经添加了我的输出。这是第二个图像.. – Mobilewits