【问题标题】:objective-c: drawRect - path draws incompleteobjective-c: drawRect - 路径绘制不完整
【发布时间】: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


【解决方案1】:

更改您的代码:

CGPoint newloc = CGPointMake(_origin.x - 20, _origin.y + 42);

CGPoint newloc = CGPointMake(_origin.x + 42, _origin.y + 20);

你会看到你的六边形。但它不正确。

要获得更正确的六边形,请使用以下代码:

CGPoint newloc = CGPointMake(_origin.x + 46, _origin.y + 20);
CGPathMoveToPoint(path, NULL, newloc.x + 23, newloc.y + 40);
CGPathAddLineToPoint(path, NULL, newloc.x + 46, newloc.y + 0);
CGPathAddLineToPoint(path, NULL, newloc.x + 23, newloc.y - 40);
CGPathAddLineToPoint(path, NULL, newloc.x - 23, newloc.y - 40);
CGPathAddLineToPoint(path, NULL, newloc.x - 46, newloc.y + 0);
CGPathAddLineToPoint(path, NULL, newloc.x - 23, newloc.y + 40);
CGPathCloseSubpath(path);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多