我试图在Objective-c中绘制一个阴阳,但我无法弄清楚如何去做。我创建了两个连接的矩形。我无法弄清楚如何制作矩形曲线的线条,以便我可以用它们制作一个圆圈。到目前为止,这是我的代码。
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddRect(context, CGRectMake(60, 150, 80, 10));
CGContextStrokePath(context);
CGContextAddRect(context, CGRectMake(60, 150, 190, 10));
CGContextStrokePath(context);
有没有更简单的方法在objective-c中创建阴阳,还是我朝着正确的方向?我是Objective-c和编程的新手。
答案 0 :(得分:6)
我建议用弧线(实际上是一系列半圆)代替圆角矩形。例如,将一部分视为三个独立的半圆:
然后您可以像这样绘制这些弧:
CGContextAddArc(context, center.x, center.y - side / 4.0, side / 4.0, M_PI_2, -M_PI_2, TRUE); // red part
CGContextAddArc(context, center.x, center.y + side / 4.0, side / 4.0, M_PI_2, -M_PI_2, NO); // blue part
CGContextAddArc(context, center.x, center.y, side / 2.0, -M_PI_2, M_PI_2, YES); // dark grey stroke
但很明显,你可能不会真正画出这些笔画,而只是将它们填入,然后对符号的底部重复这个过程:
- (void)drawRect:(CGRect)rect {
CGFloat side = MIN(rect.size.width, rect.size.height); // length of the side of the square in which the symbol will rest
CGPoint center = CGPointMake(rect.size.width / 2.0, rect.size.height / 2.0); // the center of that square
CGContextRef context = UIGraphicsGetCurrentContext();
// draw white part
CGContextAddArc(context, center.x, center.y - side / 4.0, side / 4.0, M_PI_2, -M_PI_2, TRUE);
CGContextAddArc(context, center.x, center.y + side / 4.0, side / 4.0, M_PI_2, -M_PI_2, NO);
CGContextAddArc(context, center.x, center.y, side / 2.0, -M_PI_2, M_PI_2, YES);
CGContextClosePath(context);
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillPath(context);
// draw black part
CGContextAddArc(context, center.x, center.y - side / 4.0, side / 4.0, M_PI_2, -M_PI_2, TRUE);
CGContextAddArc(context, center.x, center.y + side / 4.0, side / 4.0, M_PI_2, -M_PI_2, NO);
CGContextAddArc(context, center.x, center.y, side / 2.0, -M_PI_2, M_PI_2, NO);
CGContextClosePath(context);
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
CGContextFillPath(context);
// draw black dot
CGContextAddArc(context, center.x, center.y - side / 4.0, side / 12.0, 0, M_PI * 2.0, YES);
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
CGContextFillPath(context);
// draw white dot
CGContextAddArc(context, center.x, center.y + side / 4.0, side / 12.0, 0, M_PI * 2.0, YES);
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillPath(context);
}
产量: