I 'm writing a custom shaped HUD and filling it with some color, but I can't fill the right part of my HUD.
我正在编写一个自定义形状的HUD并用一些颜色填充它,但我无法填充我的HUD的正确部分。
#define startX 20
#define startY 20
#define circleDiameter 60
#define PI 3.14159265358979323846
Here is the code:
这是代码:
- (void)drawRect:(CGRect)rect
CGContextClearRect(UIGraphicsGetCurrentContext(), rect);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context,self.bounds);
CGContextSetLineWidth(context, 1.0f);
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:255 blue:0 alpha:0.5].CGColor);
CGRect circlePoint = CGRectMake(startX, startY, circleDiameter, circleDiameter);
CGContextFillEllipseInRect(context, circlePoint);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextAddEllipseInRect(context, circlePoint);
CGContextStrokePath(context);
CGContextSetLineWidth(context, 1.0f);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:255 blue:0 alpha:0.5].CGColor);
CGContextBeginPath(context);
//line start x.
CGContextMoveToPoint(context, 70, 28);
CGContextAddLineToPoint(context, 170, 28);
CGContextMoveToPoint(context, 70, 72);
CGContextAddLineToPoint(context, 170, 72);
CGContextStrokePath(context);
//draw radius
CGContextAddArc(context, 170, 50, 22, -PI/2, PI/2, 0);
CGContextStrokePath(context);
CGContextClosePath(context);
CGContextFillPath(context);
}
I want to fill the whole path with the color green, what should I do?
我想用绿色填充整个路径,我该怎么办?
here is the result snapshot.:
这是结果快照:
2 个解决方案
#1
3
Use BezierPath to draw that rounded rectangle with fill color
使用BezierPath绘制带填充颜色的圆角矩形
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(55, 28, 140, 44) cornerRadius:22];
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:255 blue:0 alpha:0.5].CGColor);
[bezierPath fill];
#2
3
CGContextClearRect(UIGraphicsGetCurrentContext(), rect);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context,self.bounds);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetAllowsAntialiasing(context, YES);
CGContextSetShouldAntialias(context, YES);
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(55, 28, 138, 44) cornerRadius:22]; CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0. green:0.5 blue:0. alpha:0.5].CGColor);
[bezierPath fill];
[bezierPath stroke];
CGContextSetLineWidth(context, 1.0f);
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:0.5 blue:0 alpha:0.5].CGColor);
CGRect circlePoint = CGRectMake(startX, startY, circleDiameter, circleDiameter);
CGContextFillEllipseInRect(context, circlePoint);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextStrokeEllipseInRect(context, circlePoint);
Here is the result what I expect!
这是我期望的结果!
#1
3
Use BezierPath to draw that rounded rectangle with fill color
使用BezierPath绘制带填充颜色的圆角矩形
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(55, 28, 140, 44) cornerRadius:22];
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:255 blue:0 alpha:0.5].CGColor);
[bezierPath fill];
#2
3
CGContextClearRect(UIGraphicsGetCurrentContext(), rect);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
CGContextFillRect(context,self.bounds);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetAllowsAntialiasing(context, YES);
CGContextSetShouldAntialias(context, YES);
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(55, 28, 138, 44) cornerRadius:22]; CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0. green:0.5 blue:0. alpha:0.5].CGColor);
[bezierPath fill];
[bezierPath stroke];
CGContextSetLineWidth(context, 1.0f);
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:0.5 blue:0 alpha:0.5].CGColor);
CGRect circlePoint = CGRectMake(startX, startY, circleDiameter, circleDiameter);
CGContextFillEllipseInRect(context, circlePoint);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextStrokeEllipseInRect(context, circlePoint);
Here is the result what I expect!
这是我期望的结果!