【发布时间】:2013-11-20 12:52:18
【问题描述】:
我正在尝试绘制一个六边形,并且一直在关注一些在线教程。但我一定做错了什么,因为我的结果总是一条不完整的路径。最初我认为这是因为我将视图框架设置得太小,但即使我将 w/h 提高到 800,我仍然得到相同的结果。这是我的代码:
FEG_Map 是一个 UIView,在 viewcontroller 中设置,将保存十六进制网格。
@implementation FEG_Map
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void) addHex {
float rowX = 400.0;
float rowY = 10.0;
FEG_Hex* thisHex = [[FEG_Hex alloc] initWithFrame:CGRectMake(rowX, rowY, 800.0, 800.0)];
thisHex.backgroundColor = [UIColor clearColor];
[self addSubview:thisHex];
}
在 FEG_Hex 中,我覆盖 drawRect 并添加:
- (void)drawRect:(CGRect)rect {
//create mutable path
CGMutablePathRef path = CGPathCreateMutable();
//go to start point
CGPathMoveToPoint(path, nil, _origin.x, _origin.y);
//move along hex path
CGPoint newloc = CGPointMake(_origin.x - 20, _origin.y + 42);
CGPathMoveToPoint(path, NULL, newloc.x, newloc.y);
CGPathAddLineToPoint(path, NULL, newloc.x + 16,newloc.y + 38);
CGPathAddLineToPoint(path, NULL, newloc.x + 49, newloc.y + 0);
CGPathAddLineToPoint(path, NULL, newloc.x + 23, newloc.y - 39);
CGPathAddLineToPoint(path, NULL, newloc.x - 25,newloc.y - 40);
CGPathAddLineToPoint(path, NULL, newloc.x -43, newloc.y + 0);
CGPathCloseSubpath(path);
//add a context
CGContextRef context = UIGraphicsGetCurrentContext();
//add path to context
CGContextAddPath(context, path);
//stroke path
CGContextSetLineWidth(context, 2.0);
//set the stroke color
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextStrokePath(context);
}
我的结果是:
【问题讨论】:
-
填写
rect,这样你就知道你在哪里画了。在创建点时记录它们(或记录创建的路径)。 -
_origin设置为(0,0 可能)是什么?为视图使用不同的背景颜色,以便您可以看到边框。
标签: objective-c drawrect cgpath